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