在tutorial我发现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文件的计算机上运行?
答案 0 :(得分:4)
但是,目前尚不清楚输入文件是什么。是.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/
答案 1 :(得分:2)
您可以使用通配符将当前目录中的类添加到JAR文件中。
jar cf mynewjar.jar *.class
当您将源文件编译为字节代码时,该源中的所有类将作为单独的.class文件生成,因此除非您的game.java具有多于Game类,否则游戏类就足够了。
答案 2 :(得分:1)
Jar文件可以包含您想要的任何文件,但是要保存Java程序,您至少需要.class文件,因此您必须包含它们。您正在谈论的游戏类可能依赖于其他类。您可以检查:删除所有.class文件并仅重新编译Game.java(javac Game.java)。编译的所有其他类都是依赖项。所有这些都必须包含在Jar文件中,您的程序可以运行。生成的类文件没有相应的.java文件(即你的GameWindow $ 2 $ 7.class)是内部匿名类,在你的例子中是GameWindow类的内部类。如果需要其他库,则必须在其他计算机上存在这些库,才能运行程序。但是你可以将其他罐子的内容包含在你的jar中,这样就可以将所需的全部内容捆绑到一个文件中。
答案 3 :(得分:1)
.jar文件必须包含运行时期间所需的所有类。这包括GameWindow$2$10
类,它们是您在GameWindow
类中编写的匿名内部类。
.jar文件中不包含其他.jar文件,但您可以使用清单中的Class-path
属性来引用它们。
答案 4 :(得分:1)
关于外部依赖项,除非您将依赖项编译为.class文件,或者使用FatJar http://fjep.sourceforge.net/之类的东西将它们添加到一个大jar中,否则这将无效。
答案 5 :(得分:0)
您可以创建.jar文件,使用已编译的类压缩文件夹并重命名该文件。
例如,如果您的班级文件位于“游戏”文件夹中,请将其压缩到game.zip,并将其重命名为game.jar
这很简单,有效!