Maven2:依赖集设置为编译未加入战争

时间:2010-11-04 16:48:37

标签: maven-2 dependencies war

我有一个由多个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>

2 个答案:

答案 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

......我不记得这两个排除的确切区别,如果你还没有覆盖战争插件,那真的不重要。