Maven 2 Maven2:编译的依赖项集未添加到war

Maven 2 Maven2:编译的依赖项集未添加到war,maven-2,dependencies,war,Maven 2,Dependencies,War,我有一个多模块项目,由几个jar模块和一个war模块组成。当我做mvn包时,war被创建,但是war的lib文件夹中不包括一个依赖项(javax.mail)。 将依赖项设置为compile是主pom。war不依赖于mail.jar,而是依赖于module.jar。 当我做mvn dependency:tree时,我觉得这三个很好。在调试中运行也不会显示任何错误 有人有主意吗 BB 彼得 编辑:在主POM中我有 <dependency> <groupId>javax

我有一个多模块项目,由几个jar模块和一个war模块组成。当我做mvn包时,war被创建,但是war的lib文件夹中不包括一个依赖项(javax.mail)。 将依赖项设置为compile是主pom。war不依赖于mail.jar,而是依赖于module.jar。 当我做mvn dependency:tree时,我觉得这三个很好。在调试中运行也不会显示任何错误

有人有主意吗

BB 彼得

编辑:在主POM中我有

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.1</version>
    <scope>compile</scope>
</dependency>

javax.mail
邮件
1.4.1
编译
作为托管依赖项。模块jar具有如下依赖关系:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
</dependency>

javax.mail
邮件
war模块不依赖于javax.mail

编辑2:

我确实覆盖了主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>

org.apache.maven.plugins
maven战争插件
2.1
${war.name}
真的
${buildNumber}

如果javax.mail依赖项是某个模块的依赖项,则应该包括它。但是,如果它被定义为
可选的
依赖项,它将破坏可传递的依赖机制

换句话说,如果在您的模块中,您有以下定义:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.1</version>
    <optional>true</optional>
</dependency>

javax.mail
邮件
1.4.1
真的

如果是这种情况,只需删除此
true
语句。

您的pom或主pom是否覆盖maven war插件?可以明确地将工件排除在战争之外:

而且,


…我记不清这两个排除项之间的确切区别,如果您不重写war插件也没什么关系。

我对问题进行了编辑,以使事情更清楚。如您所见,没有使用可选标记。然而,我们也依赖于log4j,它也依赖于javax.mail,但正如所提供的那样,war是否依赖于依赖于mail.jar的模块??作为测试,我在war pom中添加了对javax.mail的依赖,然后将mail.jar添加到war中……必须调查:-)我编辑了这个问题。我确实覆盖了war插件,但只是在使用某个配置文件时强制使用某个命名,并包含一个buildnumber。没有进行排除。