如何使用.jar文件中的类?


134

我在Sun上阅读了有关JAR文件的Java教程,但是仍然找不到解决我问题的方法。我需要使用一个名为jtwitter.jar的jar文件中的类,我下载了该文件并尝试执行它(昨天我发现可以通过双击来执行.jar文件),而Vista却给我一个错误,提示“无法从[path] /jtwitter.jar“加载Main-Manifest属性。”

编码.jar文件的人要我将其导入,但是如何将.jar文件存储在我的代码中呢?我尝试将.jar文件和.java文件都放在同一目录中,但是没有用。

我要使用的文件在这里:http : //www.winterwell.com/software/jtwitter.php

我正在使用JCreator LE。


13
为什么要投票?我认为这是一个很好的问题,答案中包含有趣的信息!(+1)
瓜尔达

Answers:


34

并非每个jar文件都是可执行文件。

现在,您需要在Java文件中导入jar下方的类。例如,

import org.xml.sax.SAXException;

如果您正在使用IDE,则应参考其文档。或者至少在此线程中指定您正在使用哪个。这肯定会使我们为您提供进一步的帮助。

如果您没有使用任何IDE,请查看javac -cp选项。但是,最好将程序打包到一个jar文件中,并在其中包含所有必需jar的。然后,为了执行您的jar

java -jar my_program.jar

您应该在其中有一个META-INF/MANIFEST.MF文件jar。参见此处,了解操作方法。


我知道这很旧,但实际上并不需要import任何东西-它只是避免了必须为使用该类的人写完全合格的类名,而只允许使用简单的类名(SAXException)-只是导入名称空间
user85421

173

假设我们需要使用Classnamejar文件中包含的类org.example.jar

您的源代码在这样的文件中mysource.java

import org.example.Classname;

public class mysource {
    public static void main(String[] argv) {
    ......
   }
}

首先,如您所见,必须在代码中导入类。为此,您需要import org.example.Classname;

其次,在编译源代码时,必须引用jar文件。

请注意使用:;编译时的区别

  • 如果您使用的是类似Unix的操作系统:

    javac -cp '.:org.example.jar' mysource.java
  • 如果您在Windows下:

    javac -cp .;org.example.jar mysource.java

之后,您获得字节码文件 mysource.class

现在您可以运行:

  • 如果您使用的是类似Unix的操作系统:

    java -cp '.:org.example.jar' mysource
  • 如果您在Windows下:

    java -cp .;org.example.jar mysource

4
您能再解释一下这个符号吗?这解决了我的问题,但不幸的是,在这种特殊情况下,我不知道分号/冒号的含义。
2012年

2
这个分号/冒号的故事花了我整整一天的时间。至少我现在找到了,谢谢!
Maxim Zubarev

1
@ChaseMeadors 分号 / 冒号在这里实质上是“和”的意思。它是分离.org.example.jar
duozmo 2014年

如果您正在浏览,请注意与大多数*PATH变量的区别:.jar文件需要单独命名
duozmo 2014年

15

您需要在类路径中添加jar文件。编译Java类:

javac -cp .;jwitter.jar MyClass.java

运行代码(假设MyClass包含main方法):

java -cp .;jwitter.jar MyClass

您可以在任何地方使用jar文件。如果jar文件与Java文件位于同一目录中,则可以完成上述工作。


7

编译/运行代码时,需要将.jar文件放入类路径中。然后,您只需使用.jar中类的标准导入即可。


6

正如workmad3所说,您需要将jar文件放在类路径中。如果从命令行进行编译,则意味着使用-classpath标志。(避免使用CLASSPATH环境变量;这会给IMO带来麻烦。)

如果您使用的是IDE,请告诉我们哪个IDE,我们可以为您提供特定于该IDE的步骤。


如果您使用脚本或诸如firedaemon之类的程序来运行应用程序,则classpath env变量很有用。当您在全球范围内使用它时,这只是一种痛苦:)
workmad3

我仍然喜欢明确地看到它。
乔恩·斯基特

我同意,我希望明确地看到它。
J3r3myK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.