【问题标题】:Maven Assembly Plugin: Unpacking overwrites different versions of dependenciesMaven Assembly Plugin:解包覆盖不同版本的依赖
【发布时间】:2013-07-21 20:19:17
【问题描述】:

我正在使用 Maven 程序集插件,我使用它生成单个 Jar 文件,其中包含我的应用程序的所有依赖项(根据 jarlib.xml 中的定义解包:https://gist.github.com/knyttl/7cc0730ae0fb6947cbda)。这个dependency.jar 然后可以用我的application.jar 放在类路径上,并以java -cp application.jar:dependencies.jar my.class.Runner 运行。然而,当解压 jars 时,问题是相同工件的多个版本。

例如,我使用的是 org.apache.xmlrpc:xmlrpc-server:jar:3.1.3,它依赖于 javax.servlet:servlet-api:jar:2.3。在我的应用程序中,我需要使用不同的、较新版本的 javax.servlet,但是在解包时,会跳过新版本并使用旧版本。

  1. 有没有办法忽略xmlrpc-server给出的依赖关系?
  2. 有没有办法优先考虑较新版本的javax.servlet
  3. 有没有一种方法可以创建单个 jar 而无需解压依赖项并能够将它们与-cp application.jar:dependencies.jar 一起使用?当我尝试在不解包的情况下构建 jar 时,运行应用程序时没有找到任何内部 jar 类。

【问题讨论】:

    标签: maven jar classpath dependency-management


    【解决方案1】:

    听起来你真正想要的是 shade 插件 - 能够创建一个包含所有这些的单个 jar。 https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

    【讨论】:

    【解决方案2】:

    我找到的最佳解决方案是直接在 pom 中的<dependency> 标签中直接使用<exclusions>,无需任何插件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2016-04-17
      • 2016-02-13
      • 2013-03-14
      • 1970-01-01
      • 2013-06-20
      • 2015-02-21
      相关资源
      最近更新 更多