Профиль 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>