【问题标题】:Why Maven runs profile plugin even if profile is not activated为什么即使未激活配置文件,Maven也会运行配置文件插件
【发布时间】:2016-03-23 21:38:39
【问题描述】:

另一个 Maven 问题。我有由 maven-surefire-plugin 运行的带有 TestNG 测试的应用程序。我创建了 2 个配置文件,用于制作和测试。

我正在通过“mvn clean install”命令构建我的应用程序。现在我的目标是仅在我指定测试配置文件时运行 TestNG 测试。

代码:

profiles>
    <profile>
        <id>prod</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <profile>
        <id>test</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.19</version>
                    <configuration>
                        <suiteXmlFiles>
                            <suiteXmlFile>${basedir}/target/test-classes/firstTest.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

</profiles>

但问题是每次构建应用程序时都会运行测试...无论是否指定了“测试”配置文件。为什么?

【问题讨论】:

  • 测试阶段是 Maven 默认构建生命周期的一部分。除非您明确禁用它,否则它始终会执行。将此 sn-p 放入您的生产配置文件 true

标签: java maven


【解决方案1】:

只有在激活 maven 配置文件“test”的情况下才运行测试的解决方案:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>test</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skipTests>false</skipTests>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

另见How to keep Maven profiles which are activeByDefault active even if another profile gets activated?

【讨论】:

    【解决方案2】:

    您可以运行 mvn clean install -DskipTests 或更改您的 production 配置文件定义:

     <profile>
         <id>prod</id>
         <activation>
             <activeByDefault>true</activeByDefault>
         </activation>
         <build>
             <plugins>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>2.19</version>
                     <configuration>
                         <skipTests>true</skipTests>
                     </configuration>
                 </plugin>
             </plugins>
         </build>
     </profile>
    

    【讨论】:

      【解决方案3】:

      我认为您必须明确跳过测试。

      尝试将以下配置添加到您的默认配置文件中。

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19</version>
            <configuration>
              <skipTests>true</skipTests>
            </configuration>
          </plugin>
        </plugins>
      </build>
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2011-11-12
        • 2014-10-29
        • 2019-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 2016-05-20
        相关资源
        最近更新 更多