2012-09-18 37 views
9

我已经下载了两个罐子。我想导入他们包含的一些类。我该怎么做呢?如何将jar导入到我的java程序中?

这是我的算法类。我试着按照下面的网站上的说明无济于事。

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

有针对OSX的安装程序(我跑山狮),据称这增加了罐子到类路径中。不幸的是,它也安装了Java博士。我宁愿只使用Sublime和Terminal。我认为这将是很容易只是......

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中。每个新的终端都必须执行该命令。

+0

什么是'stdlib'?什么是'Java博士'?我使用maven导入/下载我从IDE运行所需的依赖项。我不知道任何安装程序会将您想要添加到课程路径中的jar添加到您的课程路径中。 –

+0

@Peter Lawrey Dr. Java是一个IDE,stdlib是我下载的一个jar文件,并且正试图导入到我的程序中。我试图手动将这些罐子添加到我的类路径中,但没有成功。 –

+0

我相信禁止将一个包命名为java.stdlib。在运行时,会抛出java.lang.SecurityException异常。所以导入可能是错误的。 – RealHowTo

回答

3

如果您使用终端来编译并启动程序,然后在终端窗口,开始通过设置CLASSPATH

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

然后你可以键入echo $CLASSPATH,看到罐子被引用。

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

或者你可以通过CLASSPATH到的javac:

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

为未来的终端会话保持此CLASSPATH,添加export线以上的文件.profile文件在你的home目录。

+0

感谢您的帮助,但这些建议仍然会产生错误。我已经添加到我的问题。 –

+0

@MichaelGruber您需要将/ path /改为零件以反映文件系统上罐子的位置。我用_path/to/_作为占位符。在终端中,转到罐子的位置并输入'pwd'。这会打印出你需要放入你的'CLASSPATH'' – pb2q

+1

是的,我知道。 echo $ CLASSPATH输出 :/Users/Michael/Dropbox/Algorithms/includes/algs4.jar:/Users/Michael/Dropbox/Algorithms/includes/algs4.jar ---我仍然得到相同的javac错误。 –

0

启动javac-classpath <path_to_jar>选项。或编辑CLASSPATH环境变量,以便它包含您希望使用的类的JAR。

2

你可能有类路径的东西是正确的。尽管您尝试导入的课程可能不会被称为java.stdlib。您需要导入完全限定的软件包名称...可能类似于org.somecompany.ourlibrary.stdlib。因此,您需要

import org.somecompany.ourlibrary.stdlib 

位于您的Percolations.java文件的顶部并与其余的导入语句一致。

+1

如果它不只是stdlib或java.stdlib我不确定它会是什么......在我从网站上获得的提示方式上没有多少提示。 –

+0

在许多IDE中,如果您使用来自类路径中的库的类,它将为您建议并为该类添加一个导入。你不需要知道你的大部分课程在包装方面。 –

1

您的渗滤计划是否包含在其自己的包装中?如果是这样,请尝试通过注释掉文件中的任何包声明并重新编译它,将它放入默认包中。 此外,algs4没有在java包中,它只是它自己独立的东西。

3

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

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

0

我在本课程的工作中遇到了同样的问题,但是对于windows。如果它能帮助某人,我会在这里留下评论。

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

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

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

1

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

祝你好运。

0

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

0

只是将软件包命名为默认值,那么它将正常工作。还后你不需要导入点儿只是运行在

Fundamentsls提供了一些代码

章像

平均

0

我的解决方案是为我的Sublime文本编辑器添加2个新的编译系统:一个编译,另一个执行。使用工具 - > Build_system-> New_build_system ...从主菜单与这两个代码片段:

编译(我命名文件 “的ALG-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" 
} 

为运行(“的ALG-run.sublime_build”)

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

不要忘记从您的系统的正确的人在这里替代路径的JAR文件。 我明白,这个问题是相当古老的,但我希望这将有助于某人。

0

如果您收到了“不能解析为一个类型”的错误,并试图加入stdlib.jar或algs4.jar文件,这里是解决方案:

在stdlib.jar和algs4的库.jar位于“默认”包中。在Java中,您无法从命名包访问默认包中的类。如果您需要使用具有命名包的库,则可以使用这些包版本:

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

你可以在这里下载这些文件: http://algs4.cs.princeton.edu/code/

然后你就可以自动添加导入: 进口edu.princeton.cs.algs4.ClassName

0

打开你的崇高

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

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

这可以告诉崇高运行命令

{ 
    "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

以下的算法课我有同样的问题。王仁飞的解决方案为我工作(我没有足够的分数直接评论他的回应)。

在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/*:/让崇高知道握住我的包,所以现在当我建,它第一次加载那些包的目录位置。

相关问题