2010-04-07 158 views
2

tutorial我发现jar文件可以通过以下方式创建:如何创建一个.jar文件?

jar cf jar-file input-file(s) 

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

但是现在不清楚哪些.class文件应该放在那里。编译.java文件后,我有很多.class文件。其中一个原因是我有很多这样的文件:GameWindow $ 2 $ 10class,GameWindow $ 2 $ 7.class等等。我是否应该将它们全部包含到用于创建.jar文件的命令行中?

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

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

回答

1

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

1

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

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

4

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

是的,你需要包括类文件。

我有很多像这样的文件:GameWindow $ 2 $ 10class,GameWindow $ 2 $ 7.class等等。我是否应该将它们全部包含到用于创建.jar文件的命令行中?

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

运行我的应用程序我使用java游戏。所以,当我创建一个.jar文件时,我需要仅使用Game.class文件?

不,类游戏将使用其他类,而其他类则反过来使用其他类。你需要他们。

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

也就是说,创建一个JAR手动是一个很好的学习经验,但不是你真的做练习。

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

+0

+为“良好的学习体验”。确保你在**之后自动化**你知道你在做什么。现在不要尝试做! – 2010-04-07 09:09:58

1

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

2

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

jar cf mynewjar.jar *.class 

当您编译源文件转换成字节码,即源中的所有类都将作为单独的.class文件生成,所以除非你game.java具有比游戏类越多,游戏类就足够了。

0

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

举例来说,如果你的类文件位于“游戏”文件夹,压缩它game.zip,并改名为game.jar

这是非常简单的,它的作品!