¿Cómo activar un perfil de Maven en un módulo dependiente?
Supongamos que tengo un móduloA:jar
, cuyo conjunto de dependencias de tiempo de ejecución y compilación depende de la versión JDK. En mi ejemplo, tengo unpre-jdk6-profile
paraJAXB API: antes de JDK 1.6.0 necesito incluirjaxb-api-nnn.jar
como una dependencia de compilación. Este perfil se coloca enA.pom
.
Tambien tengo moduloB:war
, que depende deA:jar
. Quiero poder activar este perfil en un servidor de compilación para compilar el JDK 1.5.x entregable. , Cuando ejecuto Maven con un perfil dado activado, recibo el mensaje:
mvn -Ppre-jdk6-profile -o install
[WARNING]
Profile with id: 'pre-jdk6-profile' has not been activated.
yjaxb-api-nnn.jar
falta en el resultadoB.war
. Sin embargo, si activo este perfil cuando construyo desde el padrepom.xml
, todo está bien. Eso significa que los perfiles no se heredan de las dependencias, y el pom.xml multimódulo principal pudo compilar todo correctamente porque parece que todos los perfiles se fusionaron en el reactor.
Cambiar el perfil a padre pom empeora las cosas, ya que las dependencias se aplican a todos los demás proyectos (por ejemplo, aC:ear
) ¿Existen buenas soluciones para esta tarea, es decir, si hay algún módulo?A
depende del móduloB
, entonces todas las dependencias de compilación y tiempo de ejecución que son activadas por un perfil, ¿se manejan correctamente?
El perfil en proyectoA:jar
sigue:
<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>