Java创建.jar文件

85

我正在学习Java,遇到了问题。我创建了6个不同的类,每个类都有自己的main()方法。我想为每个类创建可执行的.jar文件,也就是6个可执行的.jar文件。

到目前为止,我尝试过:

java -jar cf myJar.jar myClass.class

我得到了'Unable to access jarfile cf'错误提示。我在做什么错了,但我不知道具体是什么问题。我同时在使用Eclipse IDE。

6个回答

136
为了创建一个.jar文件,你需要使用jar而不是java:
jar cf myJar.jar myClass.class
此外,如果您想使其可执行,您需要指定一个入口点(即具有public static void main(String[] args)的类)来运行您的应用程序。通常通过创建包含Main-Class标题(例如Main-Class:myClass)的清单文件来完成此操作。
但是,正如Mark Peters所指出的那样,使用JDK 6,您可以使用e选项来定义入口点:
jar cfe myJar.jar myClass myClass.class 

最后,您可以执行它:

java -jar myJar.jar

另请参阅


1
这不是在错过重点吗?cf 甚至是 java 的有效选项吗?无论如何,他想创建 jar 文件,而不是运行它。根据问题的描述。 - Mark Peters
@Mark Peters:笔误,我是说JAR。谢谢。 - João Silva
1
在什么情况下你不需要-jar参数呢?而且,由于你没有指定清单文件,这样做也无法使其可执行。据说在JDK 6+中,你可以使用"e"作为一种快捷方式来避免手动提供清单文件:jar cfe myJar.jar myClass myClass.class - Mark Peters
每次我尝试运行它时,总是会出现“在myJar.jar中没有主清单属性”的错误 :/ - Maslor
@KayvanShah的意思是,创建文件。 - undefined
显示剩余2条评论

18

由于您提到了您正在使用Eclipse... Eclipse可以为您创建JAR文件,只要您已经运行过每个具有主函数的类一次。 右键单击项目并单击“导出”,然后在Java文件夹下选择“可执行JAR文件”。 在启动配置中选择类名,选择保存jar的位置,并决定是否需要处理库。 单击完成,在裤子上擦手。


10

通常情况下,您需要将比-e开关提供的内容更多地放入清单中,在这种情况下,语法如下:

jar -cvfm myJar.jar myManifest.txt myApp.class

命令为:"create verbose jar文件名 manifest文件名",紧跟着是您想要包含的文件。

请注意,您提供的清单文件名称可以是任何名称,因为jar将自动重命名它并将其放置在jar文件的正确位置。


6

方法一:

假设我们有一个名为test.java的Java文件,其中包含主类testa。现在,我们首先要将Java文件编译成可执行文件,只需在命令行中输入javac test.java即可。接着,在同一目录下创建一个名为manifest.txt的文件,并在其中写入Main-Class: mainclassname(mainclassname是你的主类名)。例如:

  Main-Class: testa

然后我们通过以下命令创建 JAR 文件:
  jar cvfm anyname.jar manifest.txt testa.class

方法一:

我们可以通过以下命令运行 jar 文件:java -jar anyname.jar。

方法二:

假设我们有一个名为one的包,其中包含了所有的类。我们可以通过以下命令创建 jar 文件:

  jar cf anyname.jar one

那么我们需要在任何名为anyname.jar的文件中的META-INF目录中打开manifest.txt,并写入以下内容:
  Main-Class: one.mainclassname 

在第三行中,我们使用以下命令运行jar文件:

  java -jar anyname.jar

制作具有多个类文件的jar文件:jar cf 文件名.jar 类文件1.class 类文件2.class 类文件3.class ......


1
把所有6个类放到6个不同的项目中。然后创建这6个项目的jar文件。这样就可以得到6个可执行的jar文件。

0

如果您不想手动处理清单文件,可以使用“e”选项。这将明确定义应用程序中的入口点。

jar vcfe anyname.jar EntryPoint EntryPoint.class <files to include>

在我的情况下,它看起来像这样。
jar vcfe people.jar Peer Peer.class ClientThread.class transport/*

因此,我能够成功运行我的程序。
java -jar people.jar 

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