2

我有一个 Maven 战争项目(称为projectA),它依赖于另一个 Maven 战争(称为projectB)。它们使用覆盖与 maven-war-plugin. 两个项目具有相同的父级和相同的聚合器(不同于父级)。我可以毫无问题地成功打包最后的战争。这是我正在运行的命令(运行时我处于聚合器级别mvn):

mvn -am -pl projectA package

反应堆构建顺序是parentprojectBprojectA,一切都很好。

我现在正在尝试tomcat-maven-plugin在此版本中使用。所以我tomcat-maven-plugin在 parent pompluginManagement部分添加了它,并在projectA pom.xml中使用了它。我正在启动tomcat:

mvn -am -pl projectA tomcat:run

反应堆建造顺序保持不变。但是 tomcat 执行是在projectB(这也是一场战争)上运行的,而不是projectA上运行的。实际上,甚至没有达到projectA构建。

我已经尝试过 org.codehaus.mojo.tomcat-maven-plugin v1.1 和 org.apache.tomcat.maven.tomcat6-maven-plugin v2.1,我发现了相同的行为。

如何让 tomcat 运行最终的projectA

注意:项目依赖实际上有点复杂,并且还涉及其他子项目(jar),这就是为什么我用-am也 make)调用 maven。

4

1 回答 1

1

好的,所以我找到了解决方案。这是禁用pojectBmaven-tomcat-plugin的,这个答案是基于这个 other question

将插件链接到特定阶段

首先,我必须将 链接maven-tomcat-plugin到我的构建周期的一个阶段,以便即使我不直接从 CLI 调用插件也会调用它,显然我选择了这个integration-test阶段。我现在可以运行mvn integration-test -pl projectAtomcat 来启动 just build 战争。

这是插件在parent中声明的方式:

<pluginManagement>
<plugins>
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat6-maven-plugin</artifactId>
    <version>2.1</version>
    <executions>
       <execution>
           <id>run-war</id>
           <!-- We link this plugin to some non default phase so that we can disable it in some modules. -->
           <phase>integration-test</phase>
           <goals>
               <goal>run-war</goal>
           </goals>
       </execution>
    </executions>
</plugin>
</plugins>
</pluginManagement>

projectA中,我只是按照级中的声明使用它:

<build>
<plugins>
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat6-maven-plugin</artifactId>
</plugin>
</plugin>
</build>

停用 projectB 中的插件

然后,在 中projectB,我将相同的插件(具有相同的id)链接到 null/void/empty 阶段,最终在为此integration-test阶段构建时禁用该项目的插件:

<build>
<plugins>
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat6-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>run-war</id>
            <!-- We don't want this plugin to be called from another module build -->
            <phase/>
        </execution>
    </executions>
</plugin>
</plugins>
</build>

通过该设置,我现在可以进行完整的构建(projectB、projectA 和其他依赖项)并在一次运行中启动 tomcat 并生成战争:

mvn -am -pl projectA clean integration-test
于 2013-04-11T15:55:19.277 回答