我怎么能创建.jar文件?

在本教程中,我发现可以通过以下方式创建jar文件:

jar cf jar-file input-file(s) 

但是,目前还不清楚输入文件是什么。 是.java文件还是.class文件? 从同一页面上的示例我可以假设应该是.class文件。

但现在还不清楚我应该放哪些.class文件。 编译.java文件后,我有很多.class文件。 其中一个原因是我有很多这样的文件:GameWindow $ 2 $ 10class,GameWindow $ 2 $ 7.class等等。 我是否应该将所有这些内容都包含在命令行中以创建.jar文件?

要运行我的应用程序,我使用java Game 。 那么,当我创建一个.jar文件时,我只需要使用Game.class文件吗? 另一方面,其他类文件对应于应用程序使用的类。

我的软件使用外部库(在编译期间我指定了这些库的.jar文件)。 我的应用程序的.jar文件是否能够在不包含已使用库的.jar文件的计算机上运行?

但是,目前还不清楚输入文件是什么。 是.java文件还是.class文件? 从同一页面上的示例我可以假设应该是.class文件。

是的,您需要包含类文件。

我有很多这样的文件:GameWindow $ 2 $ 10class,GameWindow $ 2 $ 7.class等等。 我是否应该将所有这些内容都包含在命令行中以创建.jar文件?

是的,这些来自内部阶级; 你也需要它们。

要运行我的应用程序,我使用java Game。 那么,当我创建一个.jar文件时,我只需要使用Game.class文件吗?

不,类游戏将使用其他类,而后者又使用其他类。 你需要它们。

我的应用程序的.jar文件是否能够在不包含已使用库的.jar文件的计算机上运行?

没有。

也就是说,手动创建JAR是一种很好的学习体验,但不是你在实践中真正做的事情。

您应该考虑自动化JAR构建。 查看例如Ant: http : //ant.apache.org/

您可以使用通配符将当前目录中的类添加到JAR文件中。

 jar cf mynewjar.jar *.class 

当您将源文件编译为字节代码时,该源中的所有类将作为单独的.class文件生成,因此除非您的game.java具有多于Game类,否则游戏类就足够了。

Jar文件可以包含您想要的任何文件,但是要保存Java程序,您至少需要.class文件,因此您必须包含它们。 您正在谈论的游戏类可能依赖于其他类。 您可以检查:删除所有.class文件并仅重新编译Game.java(javac Game.java)。 编译的所有其他类都是依赖项。 所有这些都必须包含在Jar文件中,您的程序可以运行。 生成的类文件没有相应的.java文件(即你的GameWindow $ 2 $ 7.class)是内部匿名类,在你的例子中是GameWindow类的内部类。 如果需要其他库,则必须在其他计算机上存在这些库,才能运行程序。 但是您可以将其他jar的内容包含到jar中,以便将所需的全部内容捆绑到一个文件中。

.jar文件必须包含运行时期间所需的所有类。 这包括GameWindow$2$10类,它们是你在GameWindow类中编写的匿名内部类。

其他.jar文件不包含在.jar文件中,但您可以使用清单中的Class-path属性引用它们。

关于你的外部依赖关系,除非你将依赖项编译成.class文件,或者使用像FatJar http://fjep.sourceforge.net/这样的东西将它们添加到一个大jar中,否则这将无法工作。

您可以创建.jar文件,使用已编译的类压缩文件夹并重命名该文件。

例如,如果您的类文件位于“game”文件夹中,请将其压缩到game.zip,并将其重命名为game.jar

这很简单,很有效!