Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven:在多模块项目中构建其他模块之前,如何运行模块?_Java_Maven_Jenkins - Fatal编程技术网

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

Java Maven:在多模块项目中构建其他模块之前,如何运行模块?,java,maven,jenkins,Java,Maven,Jenkins,我有一个Maven POM项目,其中包括许多模块 其中之一是其他一些模块使用的RESTWeb服务。 此模块是一个独立的可执行文件 我试图实现的是让web服务在所有其他模块之前构建和运行 我知道,只要更改pom文件中模块的顺序,我就可以让模块在其他模块之前构建,但是在构建其余模块之前,我该如何运行它呢 我需要运行它,以便能够执行包含在其余模块中的一系列测试 我之所以尝试实现这种功能,是因为我最终要做的是在Jenkins上正确地构建和测试项目 我知道,只要更改pom文件中模块的顺序,我就可以让模块在

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

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

我试图实现的是让web服务在所有其他模块之前构建和运行

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

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

我之所以尝试实现这种功能,是因为我最终要做的是在Jenkins上正确地构建和测试项目

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

模块的排序不一定按照该顺序构建。如果一个模块依赖于另一个模块,那么您必须通过依赖项目的pom中的
来处理它。 要回答您的问题,请首先构建REST服务模块并将其部署到服务器/容器中。在多模块项目中,运行命令(如
mvnsomegoal
将在所有模块上运行
somegoal
) 要在模块上运行不同的目标,请分两步尝试
mvn-pl模块1 somegoal

mvn-pl模块2其他目标

在您的项目中,它们将采取以下形式:
mvn-pl RESTModule部署
mvn命令,用于运行其他模块的测试。还记得这些的-pl选项吗。
编辑:在查看了您评论中的要求后,我又尝试了一种解决方案。也许对你也有用。将maven deploy插件添加到REST模块的pom中,并将其绑定到一个阶段,以便只有REST模块项目部署工件,而不部署其他工件(因为他们的pom中没有这样的插件)。要添加的代码段。
`


org.apache.maven.plugins
maven部署插件
2.8.2
MyProjId
包裹
部署
我的存储库
http://path/to/your/repo

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

如果您的测试需要运行REST服务,他们应该启动它(或者确保它正在运行)。这是考试的先决条件。我不确定我是否理解你的建议。也许我也必须更新我的问题。该服务是一个独立的可执行文件。这些测试将测试他们是否能够从服务中获得预期的结果。还有一个测试,该服务将无法工作,但在这种情况下,我可以使用一个错误的url,我想?REST部分的测试应该在REST模块中实现,无论是作为单元测试还是集成测试…通过对模块进行排序来定义顺序完全是错误的。更好地定义模块之间的依赖关系,从而获得更好的结果在构建顺序中…依赖项确实存在。REST服务也可以有自己的测试,但我仍然需要测试我是否能够检索和处理其他模块中的数据。此外,还需要检索到的数据来正确执行其他模块。没有运行的web服务,我无法测试其他模块。不幸的是,该项目太大,无法发布其内部工作的详细信息。正如我在上面的评论中所说,我在每个单独的pom文件中设置了依赖项。我想我应该把这个短语从我的描述中删去。我想做的是每次提交更改时都能够在Jenkins上构建项目(更改提交给Gitlab并触发在Jenkins上的构建)。因此,我需要以这样一种方式设置项目:为了构建所有内容,您需要做的唯一一件事就是实际构建父模块。可能吗?您认为唯一的方法是将web服务构建为一个单独的模块吗?您现在可以检查并发表评论了吗。不确定是否会通知进行答案编辑@ArchThank you for your help@Abhi7950,我能够使用mvn测试命令行解决方案,并且成功了,我不确定我将如何在Jenkins中使用这种方法,但目前看来它是一个可行的选项。我还将尝试测试您的更新建议。为了防止有人感兴趣,我必须提到我使用了tomcat插件,以便能够在本地tomcat服务器上正确编译和加载服务。
<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>