12

我已经下载了两个jar。我想导入他们包含的一些类。我该怎么做呢?

这是我的算法课。我已尝试按照以下站点上的说明进行操作,但无济于事。

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

有一个 OSX 安装程序(我正在运行 Mountain Lion),据称它会将 jars 添加到您的类路径中。不幸的是,它还安装了 Dr. Java。我宁愿只使用 Sublime 和终端。我以为这很容易,只是......

import java.stdlib;

在我的 Percolation.java 文件中,但是对该程序进行 javac-ing 会产生“包 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 山狮中的 CLASSPATH 中。我必须对每个新终端执行该命令。

4

13 回答 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中。

于 2012-09-18T16:41:34.163 回答
3

回答这个问题已经过时了,但也许对普林斯顿算法课程的未来参与者有用。在环境中添加 CLASSPATH 后,java 从包中获取类,但仍然会在导入命令上生成错误。您需要从源文件中删除 import algs4 和 stdlib,编译将顺利运行。

此解决方案适用于带有 zsh 的 Ubuntu 12.04。

于 2013-08-29T07:09:18.317 回答
2

你可能有正确的类路径。但是,您尝试导入的类可能不会被调用java.stdlib。您需要导入完全限定的包名称......可能类似于org.somecompany.ourlibrary.stdlib. 因此你需要

import org.somecompany.ourlibrary.stdlib

Percolations.java与其余导入语句一起在文件的顶部。

于 2012-09-18T17:34:52.317 回答
1

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

于 2012-09-19T02:47:52.670 回答
1

如果您正在使用 Eclipse(和我一样),请选择当前项目,然后从菜单中打开项目属性。在左侧选择“Java Build path”,然后选择选项卡库。现在您单击“添加外部罐子”按钮并指向您的 jar 文件,您就完成了。

祝你好运。

于 2013-09-23T11:06:16.647 回答
0

javac使用该-classpath <path_to_jar>选项启动。或者编辑CLASSPATH环境变量,使其包含带有您希望使用的类的 JAR。

于 2012-09-18T16:36:54.960 回答
0

我在这门课程的工作中遇到了同样的问题,但对于 Windows。我会在此处留下此评论,以防它对某人有所帮助。

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

但这可能是一个问题 - 它将jar文件放在您当前的用户目录中,其路径可能包含不适当的符号(在我的情况下为俄语字母)。您需要在 Edit -> Preferences 菜单中检查它。你可以看到那里algs4.jarstdlib.jar路径。确保此路径正确并指向真实的现有文件。

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

于 2013-09-07T11:34:38.493 回答
0

我在导入类上浪费了很多时间,尝试了“javac -cp .;stdlib.jar mad.java”等的 CL 选项,但曾经得到你提到的相同错误。
然后我将导入完全注释掉,并确保 DrJava 的首选项添加了 2 个类路径 + %CLASSPATH% 变量以具有正确的值。现在简直可以工作。祝你好运!

于 2014-07-26T17:54:52.953 回答
0

只需将包命名为默认值,它就可以正常工作。之后你也不需要导入任何东西,只需运行提供的一些代码

基础知识

章喜欢

平均的

.

于 2014-09-21T15:06:33.757 回答
0

我的解决方案是在我的 Sublime 文本编辑器中添加 2 个新的构建系统:一个用于编译,另一个用于执行。使用主菜单中的 Tools->Build_system->New_build_system... 和这两个代码片段:

用于编译(我将文件命名为“algs-compile.sublime_build”):

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

用于运行(“algs-run.sublime_build”)

{
  "cmd": ["java", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file_base_name"]
}

不要忘记将此处的 jar 文件路径替换为系统中正确的路径。我知道这个问题已经很老了,但我希望这会对某人有所帮助。

于 2014-10-03T09:16:34.067 回答
0

如果您收到“无法解析为类型”错误,并尝试添加 stdlib.jar 或 algs4.jar 文件,解决方案如下:

stdlib.jar 和 algs4.jar 中的库位于“默认”包中。在 Java 中,您不能从命名包访问默认包中的类。如果您需要将库与命名包一起使用,您可以使用这些包版本:

stdlib-package.jar 和 algs4-package.jar。

您可以在此处下载这些文件:http: //algs4.cs.princeton.edu/code/

然后可以自动添加导入:import edu.princeton.cs.algs4.ClassName

于 2015-01-26T17:08:46.933 回答
0

打开你的崇高

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

将以下代码添加到新文件中

这可以告诉 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"
}

希望这可以帮助那些正在学习普林斯顿大学算法课程的人

于 2015-06-01T21:23:10.770 回答
0

我有同样的问题。Renfei Wang 的解决方案对我有用(我还没有足够的分数来直接评论他的回复)。

在 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 知道包含我的包的目录的位置,所以现在当我构建时,它首先加载这些包。

于 2015-06-27T04:54:50.580 回答