具有自定义执行规则的Maven3配置文件,是否可能?

时间:2012-03-26 17:24:10

标签: maven-3 maven-enforcer-plugin maven-profiles

我编写并测试了一个自定义的强制规则,以便在各种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

有人可以告诉我,配置文件激活自定义是否可以远程实现?

1 个答案:

答案 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>