创建包含其他.jar文件的.jar文件?

时间:2014-06-18 00:38:22

标签: java jar

我试图制作一个.jar文件(这是我第一次)并且我很困惑。我理解如何使用命令提示符来创建一个简单的jar文件,但对于我的程序,我导入了JavaMail API和我创建的另一个库(称为ArrayLibrary填充了排序方法)。我如何在一个jar文件中创建这些?

我已经读过jarSplice了,但是这个问题适合用于此问题吗?

1 个答案:

答案 0 :(得分:2)

这个问题经常被问到,所以在技术上应该标记为重复,但在查看之前的问题时,我无法找到一个适当全面的答案。所以,这是我尝试提供一个:

首先,Java规范不允许在其他jar文件中嵌入jar文件。 有一些项目提供专门的类加载器来允许这样做,但我知道在所有情况下都没有。

作为背景,.jar文件实际上是一个包含java类文件和资源的.zip,与您在文件系统中找到的树结构相同,如果你没有使用它们的话。您可以使用'jar'实用程序或任何zip实用程序创建.jar文件 - 只需将.zip文件重命名为.jar,它应该可以正常工作。

所以,答案是将所有jar文件扩展(un-jar,解压缩)到一个目录结构中,然后将它们备份。然后,您的新jar文件将包含所有原始jar文件中的所有工件。

手动执行此操作的问题除了相当繁琐之外,还有多个jar文件可能包含同名资源(例如,MANIFEST.MF文件)。您可能需要手动组合清单以使事情正常运行。

因此,已经创建了许多工具来自动执行此操作。 JarSplice似乎是其中之一,虽然我以前从未听说过,所以不能说它是否运作良好。

我的个人建议有点涉及,但还有其他好处: 为项目创建Maven版本。然后将maven-assembly plugin添加到项目中,并使用它来构建一个大jar(称为UberJar)。

额外的好处是,您现在拥有一个可靠的构建系统,您不再依赖于IDE来构建项目,而其他人(或者您以后)可以以标准方式构建项目,无需使用特定的IDE。

Gradle可能有类似的东西,或者可能有一种方法可以在Gradle中使用Maven插件,但我还没有研究过。

虽然我不推荐它,但您也可以使用Ant和它的UberJar插件来执行此操作。