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

时间:2017-01-18 13:12:47

标签: java maven jenkins

我有一个包含许多模块的Maven POM项目。

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

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

据我所知,只需更改pom文件中模块的顺序,我就可以让模块在其他模块之前构建,但是如何在构建其余部分之前运行它? < / p>

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

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

1 个答案:

答案 0 :(得分:1)

  

据我所知,只是通过更改pom文件中模块的顺序,我可以让模块在其他模块之前构建,但是如何在构建其余模块之前运行它?

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

要在模块上运行不同的目标,请尝试两个步骤 mvn -pl module1 somegoal
mvn -pl module2 someothergoal
 在您的项目中,他们将采取的形式 mvn -pl RESTModule deploy紧随其后  mvn命令用于运行其他模块的测试。请记住这些的-pl选项。 修改:在查看评论中的要求后,我尝试了另外一个解决方案。也可能适合你。将maven-deploy-plugin添加到REST模块的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>

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