我有一个由多个jar模块和一个war模块组成的多模块项目。当我做mvn包时,战争被创建但是一个依赖(javax.mail)不包含在战争的lib文件夹中。 依赖设置为编译是主要的pom。战争不依赖于mail.jar,而是一个module.jar。 当我做mvn依赖:树,这三个看起来很好。在调试中运行也没有显示任何错误。
有人有想法吗?
BB 彼得
编辑:在主POM中我有
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
<scope>compile</scope>
</dependency>
作为托管依赖项。模块jar具有如下依赖性:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</dependency>
war模块不依赖于javax.mail。
EDIT2:
我会像这样覆盖主pom中的war插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<warName>${war.name}</warName>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Build>${buildNumber}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
答案 0 :(得分:0)
如果javax.mail依赖项是您的某个模块的依赖项,则应该包含它。但是,如果它被定义为optional
依赖项,它将破坏传递依赖机制。
换句话说,如果在您的模块中,您有这个定义:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
<optional>true</optional>
</dependency>
如果是这种情况,只需删除此<optional>true</optional>
声明。
答案 1 :(得分:0)
你的pom或master pom是否覆盖了maven-war-plugin?可以明确地将文物排除在战争之外:
http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#packagingExcludes
另外, http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#warSourceExcludes
......我不记得这两个排除的确切区别,如果你还没有覆盖战争插件,那真的不重要。