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

Я написал и протестировал настраиваемое правило принудительного применения для создания сборок для конкретных дистрибутивов в различных дистрибутивах 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 Ответ

1 голос
/ 26 марта 2012

Вам просто нужно переместить конфигурацию плагина под профиль:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...