如何将jar文件导入到我的Java程序中?

13

我下载了两个JAR文件,我想要导入它们内部包含的一些类。我该怎么做?

这是我的算法课程。我已经尝试按照以下网站上的说明进行操作,但没有成功。

http://algs4.cs.princeton.edu/code/

有一个适用于OSX(我正在运行Mountain Lion)的安装程序,据说可以将这些JAR文件添加到你的classpath中。不幸的是,它还会安装Dr.Java。我宁愿只使用Sublime和Terminal。我以为这很容易,只需要...

import java.stdlib;

在我的Percolation.java文件中,但是对该程序进行javac时会产生“包stdlib不存在”的错误,

import stdlib;
我已经通过以下方式手动将stdlib.jar和algs4.jar的路径添加到终端的CLASSPATH中:
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/algs4.jar
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/stdlib.jar:/Users/Michael/path/to/jar/stdlib.jar

我也尝试过

javac -cp $CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/stdlib.jar Percolation.java

但我仍然会得到一个

javac Percolation.java
Percolation.java:1: cannot find symbol
symbol  : class stdlib
location: package java
import java.stdlib;
       ^
Percolation.java:2: package java.algs4 does not exist
import java.algs4.WeightedQuickUnionUF;
             ^

这里发生了什么?

此外,在OS X Mountain Lion中有没有一种方式可以永久添加这些值到我的CLASSPATH。我必须在每个新的终端中执行该命令。


什么是 stdlib?什么是 Dr Java?我使用 Maven 导入/下载我需要的依赖项,然后从 IDE 中运行。我不知道有任何安装程序会将您可能需要的 jar 添加到类路径中。 - Peter Lawrey
@Peter Lawrey,Dr. Java是一个集成开发环境,stdlib是我下载并尝试导入程序的其中一个jar文件。我已经尝试手动将这些jar文件添加到我的类路径中,但没有成功。 - Michael Gruber
我相信,将一个包命名为java.stdlib是被禁止的。在运行时,会抛出一个java.lang.SecurityException异常。所以导入可能是错误的。 - RealHowTo
13个回答

5

如果您正在使用终端编译和启动程序,那么请在终端窗口中首先设置CLASSPATH

$ export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar

然后您可以输入echo $CLASSPATH,查看引用的jar包。

现在,在同一个终端窗口中,使用javac编译您的类。如上所述设置CLASSPATH仅适用于当前终端窗口和从中启动的任何进程。

或者,您可以将CLASSPATH传递给javac:

$ javac -cp $CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar MyClass.java

为了使这个 CLASSPATH 在未来的终端会话中仍然有效,请将上面的 export 行添加到您主目录下的文件 .profile 中。


谢谢您的帮助,但这些建议仍然会产生错误。我已经在我的问题上进行了补充。 - Michael Gruber
@MichaelGruber,您需要更改/path/to部分以反映文件系统上JAR包的位置。我只是使用_path/to/_作为占位符。在终端中,转到JAR包所在的位置并键入“pwd”。这将打印出您需要放入CLASSPATH的内容。 - pb2q
1
是的,我知道。echo $CLASSPATH 输出为:/Users/Michael/Dropbox/Algorithms/includes/algs4.jar:/Users/Michael/Dropbox/Algorithms/includes/algs4.jar --- 但我仍然遇到相同的 javac 错误。 - Michael Gruber

3

虽然回答这个问题已经过时了,但或许对未来参加普林斯顿算法课程的人有用。

在环境中添加CLASSPATH后,Java可以从包中获取类,但在导入命令上仍会生成错误。你需要从源文件中删除import algs4和stdlib,编译就会顺利运行。

此解决方案适用于Ubuntu 12.04和zsh。


2
你可能已经正确设置了类路径。你正在尝试导入的类可能不叫做java.stdlib。你需要导入完整的包名... 可能是像org.somecompany.ourlibrary.stdlib这样的东西。因此,你需要:
import org.somecompany.ourlibrary.stdlib

将其与其他导入语句一起放在您的Percolations.java文件顶部。

1
如果不只是标准库或java.stdlib,我不确定它会是什么...从我获取它的网站上没有太多提示。 - Michael Gruber
在许多集成开发环境中,如果您使用类路径中的库中的类,它会为您建议并添加该类的导入。您不需要知道大多数类在包方面的位置。 - Peter Lawrey

1
如果你正在使用 Eclipse(就像我一样),选择当前项目,然后从菜单中打开项目属性。在左侧选择“Java Build Path”,然后选择选项卡“Libraries”。现在点击“Add External Jars”按钮,指向你的jar文件,完成操作即可。
祝好运。

1

你的 Percolation 程序是否包含在自己的包中?如果是,请尝试通过注释掉文件中的任何包语句并重新编译将其放入默认包中。 此外,algs4 中没有任何内容属于 java 包,它都是独立的。


0

我曾经遇到过同样的问题。王仁飞的解决方案对我有用(我还没有足够的积分直接评论他的回答)。

在Sublime中,导航到Preferences: Browse Packages>JavaC.sublime_build

这是我的设置:

{
    "cmd": ["javac", "-cp", "/Users/jason/Documents/lib/*:./","$file"],
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "selector": "source.java"
}

/Users/jason/Documents/lib/*:/ 让 Sublime 知道保存我的包的目录位置,这样当我构建时,它会首先加载这些包。


0

打开你的Sublime

选择工具->构建系统->新建构建系统

将下面的代码添加到新文件中

这可以告诉Sublime运行命令

{
    "cmd": ["javac -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file\" && java -cp java -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file_base_name\""],
    "shell":true,
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "selector": "source.java"
}

希望这能帮助那些正在跟随普林斯顿大学算法课程的人。

0

只需将包命名为默认值,然后它就可以正常工作。此外,在此之后,您无需导入任何内容,只需运行提供的一些代码即可。

基础

章节,例如

平均数

.


0

我在做这门课程的时候遇到了同样的问题,但是是在Windows上。我会把这个评论留在这里,以防对其他人有所帮助。

如果你使用DrJava,你的代码中就不需要任何import语句。如果你按照课程中描述的安装步骤进行操作,一切都已经为你配置好了。

但是在这里可能会出现一个问题——它会将jar文件放在您当前用户目录下,路径中可能包含不合适的符号(例如我的情况中是俄文字符)。您需要在“编辑”->“首选项”菜单中检查它。您可以看到algs4.jarstdlib.jar路径。确保这些路径正确,并指向实际存在的文件。

我只是把所有必要的文件移动到另一个目录,并在此菜单中更改了路径。这个方法解决了我的问题。


0

我曾经在导入类的过程中浪费了很多时间,尝试了“javac -cp .;stdlib.jar mad.java”的CL选项等,但总是遇到你提到的同样的错误。
然后我干脆将导入注释掉,并确保DrJava的首选项已添加了2个类路径+ %CLASSPATH%变量具有正确的值。现在它就可以正常工作了。 祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接