【问题标题】:Maven2: dependency set to compile not added to warMaven2:设置为编译的依赖项未添加到战争中
【发布时间】:2011-05-05 04:26:54
【问题描述】:

我有一个由几个 jar 模块和一个 war 模块组成的多模块项目。当我执行 mvn 包时,会创建战争,但战争的 lib 文件夹中不包含一个依赖项(javax.mail)。 依赖项设置为编译是主pom。战争不依赖于 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>

作为托管依赖项。模块jar依赖如下:

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

war 模块不依赖于 javax.mail。

编辑2:

我确实像这样覆盖主 pom 中的战争插件:

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

【问题讨论】:

  • 战争是否依赖于依赖mail.jar的模块??
  • 作为测试,我在war pom中添加了对javax.mail的依赖,然后mail.jar被添加到war中...必须调查:-)

标签: maven-2 dependencies war


【解决方案1】:

如果 javax.mail 依赖项是您的模块之一的依赖项,则应该包含它。但是如果定义为optional依赖,就会破坏传递依赖机制。

换句话说,如果在你的模块中,你有这个定义:

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

如果是这种情况,只需删除此 &lt;optional&gt;true&lt;/optional&gt; 语句即可。

【讨论】:

  • 我已经编辑了问题以使事情更清楚。如您所见,没有使用可选标签。但是,我们还依赖于 log4j,它也依赖于 javax.mail,但正如提供的那样
【解决方案2】:

您的 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

...我不记得这两个 excludes 之间的确切区别了,如果你不覆盖 war 插件也没关系。

【讨论】:

  • 我已经编辑了这个问题。我确实覆盖了战争插件,但只是在使用某个配置文件时强制使用某个命名并包含一个内部版本号。没有进行任何排除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2015-08-12
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多