Maven Assembly Plugin:解压缩会覆盖不同版本的依赖项

时间:2013-07-21 20:19:18

标签: maven jar classpath dependency-management

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

例如我使用的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类。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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