Как активировать профиль Maven в зависимом модуле?
Предположим, у меня есть модульA:jar
, чья среда выполнения и компиляция зависимостей зависят от версии JDK. В моем примере у меня естьpre-jdk6-profile
заJAXB API: до JDK 1.6.0 мне нужно включитьjaxb-api-nnn.jar
как зависимость компиляции. Этот профиль размещен вA.pom
.
У меня тоже есть модульB:war
, который зависит отA:jar
, Я хочу иметь возможность активировать этот профиль на сервере сборки для сборки JDK 1.5.x. Когда я запускаю Maven с активированным профилем, я получаю сообщение:
mvn -Ppre-jdk6-profile -o install
[WARNING]
Profile with id: 'pre-jdk6-profile' has not been activated.
а такжеjaxb-api-nnn.jar
отсутствует в результатеB.war
, Однако, если я активирую этот профиль при сборке из родительскогоpom.xml
, все отлично. Это означает, что профили не наследуются от зависимостей, и родительский многомодульный pom.xml смог построить все правильно, потому что кажется, что все профили объединены в реакторе.
Перенос профиля на родительский pom ухудшает ситуацию, поскольку зависимости применяются ко всем другим проектам (например, кC:ear
). Есть хорошие решения для этой задачи, а именно, если какой-либо модульA
зависит от модуляB
, тогда все зависимости компиляции и времени выполнения, которые активируются профилем, правильно обрабатываются?
Профиль в проектеA:jar
следующим образом:
<project ...>
<artifactId>A</artifactId>
<packaging>jar</packaging>
...
<parent>
<artifactId>P</artifactId>
...
</parent>
<profiles>
<profile>
<id>pre-jdk6-profile</id>
<activation>
<jdk>(,1.6.0)</jdk>
</activation>
<dependencies>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
...
</project>