Maven:如何在多模块项目中构建其他模块之前运行模块?

Arc*_*rch 5 java maven jenkins

我有一个 Maven POM 项目,其中包含许多模块。

其中之一是其他一些模块使用的 REST Web 服务。该模块是一个独立的可执行文件。

我想要实现的是让 Web 服务在所有其他模块之前构建和运行。

我知道,只需更改 pom 文件中模块的顺序,我就可以在其他模块之前构建该模块,但是如何在构建其余模块之前运行它?

我需要运行它,以便可以执行其余模块中包含的一系列测试。

我尝试实现这种功能的原因是因为我最终想要做的是在 Jenkins 上正确构建和测试项目。

Abh*_*950 1

我知道,只需更改 pom 文件中模块的顺序,我就可以在其他模块之前构建该模块,但是如何在构建其余模块之前运行它?

模块的排序不一定会按照该顺序构建它们。如果一个模块依赖于另一个模块,那么你必须<dependency>在依赖项目的 pom 中处理它。要回答您的问题,请首先构建 REST 服务模块并将其部署到您的服务器/容器。在多模块项目中,运行类似命令将在所有模块上mvn somegoal运行。somegoal

要在模块上运行不同的目标,请尝试分两步
mvn -pl module1 somegoal
mvn -pl module2 someothergoal
在您的项目中,它们将采用以下形式, mvn -pl RESTModule deploy后跟常用的 mvn 命令来运行其他模块的测试。也请记住这些的 -pl 选项。 编辑:查看您评论中的要求后,我尝试了另一种解决方案。可能也适合你。将 maven-deploy-plugin 添加到 REST Module 的 pom 并将其绑定到一个阶段,以便只有 RESTModule 项目部署工件,而不部署其他项目(因为它们的 pom 中没有此类插件)。要添加的片段。`

<project>

    <build>

        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
                <executions>                                                 
                <execution>     
                <id>MyProjId</id>                                         
                    <phase>package</phase>                              
                    <goals>                                              
                        <goal>deploy</goal>                             
                    </goals>                                                                               
                </execution>                                             
            </executions>
              </plugin>


    </build>
    <distributionManagement>
        <repository>
          <id>my-repository</id>
          <url>http://path/to/your/repo</url>
        </repository>
      </distributionManagement>

</project>
Run Code Online (Sandbox Code Playgroud)

并使用 jenkins 中的父 pom 运行项目。