【问题标题】:Is there a way to bundle up multiple jars within the same jar file and make sure only one main jar inside it becomes part of classpath of the app有没有办法在同一个 jar 文件中捆绑多个 jar 并确保其中只有一个主 jar 成为应用程序类路径的一部分
【发布时间】:2021-09-02 06:20:28
【问题描述】:

有没有办法在同一个 jar 文件中捆绑多个 jar,并确保其中只有一个主 jar 成为应用程序类路径的一部分,从而将这个完整的 jar 添加到它们的类路径中。 我的主 jar 中的代码将使用自定义类加载器来加载完整 jar 中其他 jar 中存在的类。 我还想为其他 jar 创建目录结构,以便我可以根据用例隔离 jar,并仅从完整 jar 内的目录中加载 jar。

感谢您对上述任何要求的任何帮助。谢谢。

【问题讨论】:

  • 为什么?无论如何one-jar.sourceforge.net 可能有用。
  • @ThorbjørnRavnAndersen 如果我没记错的话 one-jar.sourceforge.net 允许您将主 jar 与 lib 文件夹中的依赖项捆绑在一起,当调用主 jar 的主类时,它会神奇地使用自定义类加载器来加载lib 文件夹中的类。如果我错了,请纠正。就我而言,我正在编写自己的自定义类加载器。
  • @pranjal 听起来是对的。您可能想详细解释为什么需要不同的东西。自己编写一个自定义类加载器并不难,那么您尝试解决的根本问题是什么?
  • 您是否尝试根据某个配置设置更改应用程序的行为,而这不是运行时更改?如果是这种情况,您可以编写自己的自定义URLClassLoader。如果是运行时更改,它会变得复杂。

标签: java jar classpath onejar


【解决方案1】:

你可以使用Maven Shade plugin,因为它是基于自定义业务逻辑在jar内创建jar的更好选择,如果与maven组装插件相比,它提供了类重定位功能,避免了复杂结构中的问题类路径。

sample shade plugin configuration

您还可以根据您的要求在以下列表中使用 Shade 插件中的许多转换。

【讨论】:

  • 从类路径中完全删除依赖项后,maven 是否不需要重新构建?如果是这样,那将不是运行时的选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2019-12-05
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
相关资源
最近更新 更多