我编写并测试了一个自定义的强制规则,以便在各种Linux发行版上执行特定于发行版的构建。它使用mvn enforcer:enforce
命令和提供的pom.xml
构建片段进行了很好的测试。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0-beta-1</version>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>maven-enforcer-rule-redhat6x</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<configuration>
<rules>
<redhat6x implementation="org.example.enforcer.Redhat6x">
<compatible>true</compatible>
</redhat6x>
</rules>
</configuration>
<executions>
<execution>
<id>enforce</id>
</execution>
</executions>
<goals>
<goal>enforce</goal>
</goals>
</plugin>
</plugins>
在绞尽脑汁并进行大量实验测试之后,我似乎无法找到如何将此自定义强制规则用作配置文件激活选择器。
<profiles>
<profile>
<id>RedHat6x</id>
<activation>
<!-- Something goes here, but what? This doesn't work -->
<redhat6x implementation="com.cisco.tesdw.enforcer.Redhat6x">
<compatible>true</compatible>
</redhat6x>
</activation>
</profile>
</profiles>
有一些提示,配置文件激活使用maven-enforcer-rules
,详见Introduction to Profiles页面“如何判断哪些配置文件在构建过程中生效”部分下的详细信息。即,具有多个字符串值(os名称等)的每个配置文件激活被引用到相应的maven enforcer规则。但是,似乎直接包含自定义配置文件激活器在pom.xml和adding such would likely require a pom version update中并不明显。
Maven3也可以通过非常灵活的方式进行扩展,是否可以通过maven扩展机制来挂钩我的强制规则?有关于如何包含自定义生命周期参与者的文档;但是,我担心在构建开始时可能已经发生了配置文件激活。文档很稀疏,但javadoc表示在创建所有AbstractMavenLifecycleParticipant.afterProjectsRead(MavenSession session)
个实例后调用MavenProject
。这在我的脑海中留下了一些疑问,无论是在激活配置文件之前调用它。我怀疑之后,或者如何正确配置MavenProject
?
有人可以告诉我,配置文件激活自定义是否可以远程实现?
答案 0 :(得分:1)
您只需要在个人资料下移动插件配置:
<profiles>
<profile>
<id>RedHat6x</id>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0-beta-1</version>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>maven-enforcer-rule-redhat6x</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<configuration>
<rules>
<redhat6x implementation="org.example.enforcer.Redhat6x">
<compatible>true</compatible>
</redhat6x>
</rules>
</configuration>
<executions>
<execution>
<id>redhat-enforce</id>
</execution>
</executions>
<goals>
<goal>enforce</goal>
</goals>
</plugin>
</plugins>
</profile>
</profiles>