我同意这个问题有些奇怪。
让我们说我有一个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评论的那样,我们可以这样做。
$ 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
我遇到的一个原始问题是如果有人为了开发而构建,并且由于故障意外地部署到生产中,该怎么办?
在这种情况下,我默认选择生效配置文件。使用分类器是我可以使用的其他方法之一。
答案 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>
您甚至可以在配置中添加自定义消息。