Предположим, у меня есть модуль 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>