【问题标题】:Java Jar packages: do/can they include all non-JDK libraries? [duplicate]Java Jar 包:它们是否/可以包含所有非 JDK 库? [复制]
【发布时间】:2012-10-17 19:39:58
【问题描述】:

可能重复:
Is it possible to create an “uber” jar containing the project classes and the project dependencies as jars with a custom manifest file?

我正在研究多平台部署。在 Perl 和 Python 等语言中总是令人沮丧的关键事情之一是部署第三方库和第二方库。

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

【问题讨论】:

标签: java jar build-system


【解决方案1】:

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

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

【讨论】:

  • 为什么我的罐子里不能有罐子里的罐子?如果真正让我兴奋的是复杂的类加载器和递归压缩怎么办....如果您唯一的其他选择是 .zip,有时您可能喜欢在 jars 中使用 jars,因为压缩率接近 .7z。假设您无法连接到互联网,如果是这种情况,那么...恭喜您阅读本文!
  • @TylerHeiks:我不明白你的问题。 jar 文件和 zip 文件是一回事。使用相同的压缩算法。
  • > 你为什么不把 jar 和它的所有依赖压缩在一起——我不知道。 :) 我对这些东西很感兴趣。我知道在 Py/Perl 中,这将涉及文件中的一些糟糕的黑客行为,告诉他们查看他们在文件系统中的库的位置。我希望Java可以做得更好。
  • @TylerHeiks 着色/使用jarjar 通常是一种不那么疯狂的方法。
  • @JBNizet 我没有问题,也没有 - 该算法是从你的标准 windows zip 优化的
【解决方案2】:

我认为您正在寻找类似 fatjar 或 uberjar 的东西。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多