如何构建整个项目,然后在单个模块中运行插件目标?

时间:2017-11-02 12:57:32

标签: java maven

我有一个Web应用程序项目结构化或者像这样:

foo
│   pom.xml
│
├───foo-backend
│       pom.xml
│
└───foo-web
        pom.xml

模块foo-web取决于foo-backend

父POM包含嵌套项目作为模块:

...
<modules>
    <module>foo-backend</module>
    <module>foo-web</module>
</modules>
...

foo-web模块使Tomcat插件能够正确运行此应用程序,而无需进行单独的应用服务器安装:

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

我遇到的问题是,如果我只为foo-web运行此插件,则模块foo-backend不会重建,而是使用任何旧的构建输出。

我将IDEA设置为只是将项目构建为运行配置的一部分,但我希望尽可能多地保留这些项目,并尽可能保持认知步骤。

有没有办法告诉Maven使用单行或配置:

  1. compile整个项目;然后
  2. tomcat6:run foo-web子模块?

1 个答案:

答案 0 :(得分:1)

您可以创建附加到maven phases之一的tomcat maven plugin的执行。由于您希望它在所有内容都是编译器之后运行,因此阶段process-classes似乎是合适的。

此外,我假设您在尝试运行maven阶段时不想始终运行tomcat,因此最好有条件地执行此

<profiles>
  <profile>
    <activation>
      <property>
        <name>runTomcat</name>
      </property>
    </activation>
    <id>run-tomcat-on-compile</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat6-maven-plugin</artifactId>
          <executions>
            <execution>
              <id>one</id>
              <phase>process-classes</phase>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

编译并运行tomcat:

mvn process-classes -PrunTomcat