模块如何依赖于阴影罐而没有多余依赖?

时间:2016-11-06 15:06:41

标签: maven

我有一个项目有两个模块如下:

项目

- module1(阴影jar,依赖于lib A,B)

- module2(战争)

Module2依赖于module1。并且module1打包到带有maven shade插件的阴影jar。 Module2打包到依赖于module1的war。

当我尝试执行mvn包时,它会生成一个包含阴影jar的war,还包含阴影jar依赖的依赖库(A,B)。

那很奇怪。我怎样才能使战争只包含阴影jar而不包含依赖的lib?任何建议,谢谢。

1 个答案:

答案 0 :(得分:-1)

问题在于,Maven并不知道module1已被遮挡。当它试图解析module2的依赖关系时,它会查看module1的POM并查看其所有依赖项,这些依赖项随后包含在module2的WAR文件中。

您可以通过三种不同方式解决此问题:

  • 不要module1。你还没有说明为什么你需要这样做,但如果你能避免它,这就是我的建议。
  • module1指定为module2的依赖项时,请排除其所有依赖项:

像这样:

<dependency>
  <groupId>...</groupId>
  <artifactId>module1</artifactId>
  <version>${project.version}</version>
  <exclusions>
    <exclusion>
    <!-- 
       Pre-Maven 3.2.1: Repeat groupId and artifactId for all 
       direct dependencies of module1.

       Maven 3.2.1 and onwards: substitute the '...' below with '*'
    -->
      <groupId>...</groupId>
      <artifactId>...</artifactId>
    </exclusion>
  </exclusions>
</dependency>
  • 将附加的Maven程序集引入module1并应用上面的排除技巧。我刚试过这个,它对我有用。根据我的经验,当依赖于自定义&#34;捆绑&#34;时,程序集往往比着色的工件更可靠地工作。然后你根本不需要做阴影。