【问题标题】:java library inside jarjar内的java库
【发布时间】:2011-10-04 08:56:32
【问题描述】:

我创建了带有库的 mytest.jar 文件,其中包含近 30 个库文件和 jar。 是否可以将所有库 jar 放在 mytest.jar 中,以便我只需要分发 1 个 jar? 可以使用清单来完成吗? 谢谢。

【问题讨论】:

标签: java jar classpath manifest


【解决方案1】:

使用标准 Java 类加载器无法从 jars-inside-jars 加载类。但是,可以使用自定义类加载器,例如 UberJar 的工作原理。

maven shade plugin 采用了不同的方法。它将解压您依赖的所有 jar,并将它们(连同您自己的类)打包到一个大 jar 中。然后可以使用普通的类加载器。这更简单,并且在没有 maven 的情况下使用 jarjar 也是可能的。

【讨论】:

  • 在使用 maven shade plugin 或解压所有 jar 并将其重新打包为一个时需要格外小心,因为两个 jar 可能有共同的文件文件,一个 jar 的内容可能会被另一个覆盖
  • shade 插件允许重命名包(即“shading”)以避免这种情况——但是是的,你必须小心。
  • 有人创建了这个包真是太神奇了。我曾经想过这样做,很高兴知道其他人创造了它。
【解决方案2】:

通常为此目的使用像 jarjar 这样的 jar 重新打包工具。

【讨论】:

  • @Lorenzo 到 Heiko 已经添加的内容,这里是链接:code.google.com/p/jarjar 请注意,这是一个 java 约束,最好将这些 jar 分开并将它们添加到类路径中。
【解决方案3】:

不是开箱即用的。但是,One-Jar 提供了一个解决方案。它适用于独立应用程序,这是我假设你正在制作的。

如果您改为制作小程序,One-Jar 将无法工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多