Профиль Maven3 с пользовательским правилом принудительного применения, возможно ли это?

Я написал и протестировал пользовательское правило для применения определенных сборок для различных дистрибутивов 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 как подробно описано на странице " Введение в профили" в разделе "Как узнать, какие профили действуют во время сборки". А именно, каждая активация профиля, которая имеет несколько строковых значений (имя ОС и т. Д.), Относится к соответствующему правилу принудительного применения maven. Однако, кажется, что прямое включение активатора пользовательского профиля не очевидно в pom.xml, и добавление такого, вероятно, потребует обновления версии pom.

Maven3 также можно расширять очень гибкими способами. Можно ли подключить мое правило принудительного применения механизмом расширений maven? Есть документация о том, как включить пользовательских участников жизненного цикла; но я боюсь, что активация профиля, возможно, уже произошла к моменту начала сборки. Документация редкая, но Javadoc указывает, что AbstractMavenLifecycleParticipant.afterProjectsRead(MavenSession session) называется "в конце концов MavenProject экземпляры были созданы ". Это оставляет некоторые сомнения в моем уме, вызывается ли он до или после активации профиля. Я подозреваю, что после, или как получить правильно настроенный MavenProject?

Может кто-нибудь сказать мне, если настройка активации профиля даже удаленно возможно?

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>
Другие вопросы по тегам