如何使非配置文件maven构建失败?

时间:2014-06-20 05:45:53

标签: maven profile

我同意这个问题有些奇怪。

让我们说我有一个maven项目,其中包含以下个人资料。

$ mvn help:all-profiles
Profile Id: profile1 (...)
Profile Id: profile2 (...)
Profile Id: profile3 (...)
$

在没有任何特定的个人资料选择的情况下,我是否可以强制失败?

$ mvn clean package
FAIL
$ mvn -Pprofile1 clean package
SUCCESS
$ mvn -Pprofile2 clean package
SUCCESS
$ mvn -Pprofile3 clean package
SUCCESS
$

更新(个人结论)

同样,即使有人确实存在问题,这个问题也不是一个好问题。

最初的目的是通过明确的个人资料选择来收取构建项目的责任。

@khmarbaise的评论和@AngeloNeuschitzer的答案都可以解决问题。

但在这里我想我应该更新我最终的内容。

正如@khmarbaise评论的那样,我们可以这样做。

  • 制作个人资料
  • 将其中一个配置文件设为activeByDefault
$ mvn help:all-profiles
Profile Id: development
Profile Id: integration
Profile Id: staging
Profile Id: production (active by default)
$ mvm clean package
Profile -> production
$ mvn -Pdevelopment clean package
Profile -> development

我遇到的一个原始问题是如果有人为了开发而构建,并且由于故障意外地部署到生产中,该怎么办?

在这种情况下,我默认选择生效配置文件。使用分类器是我可以使用的其他方法之一。

2 个答案:

答案 0 :(得分:2)

添加一个配置文件,该配置文件执行必须在清理时失败的内容并将其设为activeByDefault。您甚至可能想要编写一个插件,除此之外什么都不会失败。

<强> CAREFUL !我写的这个没有确定目录&#39; /&#39;在任何情况下都是不可挽回的。这可能会导致严重的数据丢失,使用风险自负。 (但它适用于我的机器)

    <profile>
        <id>failure</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <directory>#!?:</directory>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>clean</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <failOnError>true</failOnError>
                        <filesets>
                            <fileset>
                                <directory>/</directory>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

答案 1 :(得分:1)

在没有配置文件处于活动状态时,您可以使用maven-enforcer-plugin使构建失败。这比拥有始终失败的特殊配置文件要干净得多(接受的答案中的代码甚至看起来是恶意的)。

将内置requireActiveProfile规则与<all>false</all>配合使用以强制至少一个配置文件处于活动状态:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0-M2</version>
        <executions>
          <execution>
            <id>enforce-first-or-second-profile-is-active</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireActiveProfile>
                  <profiles>first,second</profiles>
                  <all>false</all>
                </requireActiveProfile>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

您甚至可以在配置中添加自定义消息。