JavaJAR包:它们是否包括所有非JDK库?

JavaJAR包:它们是否包括所有非JDK库?,java,jar,build-system,Java,Jar,Build System,可能重复: 我正在研究多平台部署。在Perl和Python等语言中,最令人沮丧的一个关键问题是部署第三方库和第二方库 我想知道java构建过程是否允许将程序使用的所有非JRE库打包到jar中,这样它就可以部署到任何地方,而无需安装到任何其他目录中。不,jar文件不应该包含其他jar文件。这样做是可能的,但只有使用使一切变得更复杂的自定义类装入器。为什么不将jar及其所有依赖项压缩在一起: myApp.zip |_bin | |_ start.bat | |_ start.sh

可能重复:

我正在研究多平台部署。在Perl和Python等语言中,最令人沮丧的一个关键问题是部署第三方库和第二方库


我想知道java构建过程是否允许将程序使用的所有非JRE库打包到jar中,这样它就可以部署到任何地方,而无需安装到任何其他目录中。

不,jar文件不应该包含其他jar文件。这样做是可能的,但只有使用使一切变得更复杂的自定义类装入器。为什么不将jar及其所有依赖项压缩在一起:

myApp.zip
  |_bin
  |  |_ start.bat
  |  |_ start.sh
  |
  |_lib
     |_myApp.jar
     |_other.jar
     |_other2.jar

我想你在找像fatjar或uberjar这样的东西


这是构建过程中的一个步骤,解压所有依赖项并将它们打包到一个大罐子中。

请参见@guidosmone所说的内容。但是请注意,一些第三方jar可能有一个禁止再分配的许可证,为什么我不能在jar中使用jar-in-jar-in-jar?如果复杂类加载器和递归压缩是真正让我兴奋的。。。。有时,如果您唯一的选择是.zip,那么您可能会喜欢在jar中使用jar,因为压缩接近.7z。假设你不能连接到互联网,如果是这样的话。。。祝贺你读到这篇文章@我不明白你的问题。jar文件和zip文件是一样的。使用相同的压缩算法。>为什么不将jar及其所有依赖项压缩在一起呢?我不知道。:)我在忙这件事。我知道,在Py/Perl中,这会涉及到文件中的一些糟糕的黑客行为,让他们查看文件系统中的库所在位置。我希望Java能做得更好。@TylerHeiks着色/使用
jarjar
通常是一种不那么疯狂的方法。@JBNizet我没有问题,也没有-算法是从我们的标准windows zip优化的