我们需要能够在某些环境中跳过子模块。

所讨论的模块包含集成测试,需要半小时才能运行。因此,我们希望在CI服务器上构建时将其包括在内,但是当开发人员在本地构建(并运行测试)时,我们要跳过该模块。

有没有办法使用配置文件设置来执行此操作?我已经进行了一些谷歌搜索,并在这里查看了其他问题/答案,但没有找到一个好的解决方案。

我想一个选项是从父母那里删除该子模块 pom.xml 完全,只需在我们的CI服务器上添加另一个项目即可构建该模块。

建议?

有帮助吗?

解决方案

当然,可以使用配置文件完成。您可以在父pom.xml中执行以下操作。

  ...
   <modules>
      <module>module1</module>
      <module>module2</module>  
      ...
  </modules>
  ...
  <profiles>
     <profile>
       <id>ci</id>
          <modules>
            <module>module1</module>
            <module>module2</module>
            ...
            <module>module-integration-test</module>
          </modules> 
      </profile>
  </profiles>
 ...

在您的CI中,您会与 ci 个人资料,即 mvn -P ci clean install

其他提示

Maven版本3.2.1添加了此功能,您可以使用 -pl 转变 (捷径 为了 --projects 列表) ! 或者 - (资源)排除某些子模型。

mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install

小心bash角色!是一个特殊的角色,因此您必须单一引用它(就像我一样),或者用反斜杠角色逃脱它。

排除多个模块的语法与包含相同

mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install

编辑 Windows似乎不喜欢单个引号,但在Bash中是必要的。在Windows中,使用双引号(感谢@awilkinson)

mvn -pl "!submodule1,!submodule2" install

可以通过指定哪些反应堆项目来确定要构建的反应堆项目 -pl 命令行参数:

$ mvn --help
[...]
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
[...]

它接受以下形式之一中的逗号分开的参数列表:

  • 包含POM的文件夹的相对路径
  • [groupId]:artifactId

因此,给定以下结构:

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

您可以指定以下命令行:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

建造一切。删除列表中的元素以仅构建您的模块。


编辑:AS 黑色 指出,从Maven 3.2.1开始 一个新 -el 旗帜 这不包括反应堆的项目,类似于什么 -pl 做:

多模块项目的概念可以满足项目的相互依赖性段的需求。这样的客户取决于服务又取决于EJB或数据访问例程的服务。你 可以 以这种方式对您的连续集成(CI)测试进行分组。我会通过说CI测试需要在应用程序逻辑更改的锁定状态下进行合理化。

假设您的项目结构为:

project-root
  |
  + --- ci
  |
  + --- client
  |
  + --- server

project-root/pom.xml 定义模块

<modules>
  <module>ci</module>
  <module>client</module>
  <module>server</module>
</modules>

ci/pom.xml 定义诸如:

... 
<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
     </plugin>
  </profile>
  <profile>
    <id>CI</id>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>false</skip>
       </configuration>
     </plugin>
  </profile>
</profiles>

这将导致该模块中的Maven跳过测试,除非配置文件命名 CI 活跃。必须指示您的CI服务器执行 mvn clean package -P CI. 。 Maven网站有一个 分析机制的深入解释.

现在(从1.1.1版本开始)坑中有一个“跳过”标志。

因此,您可以做类似的事情:

    <profile>
        <id>pit</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.pitest</groupId>
                    <artifactId>pitest-maven</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

在您的模块中,坑将跳过

INFO] --- Pitest-Maven:1.1.3:MutationCoverage(Default-CLI) @ Module-Selenium --- [INFO]跳过项目

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top