Supongamos que tengo un módulo A:jar
, cuyo tiempo de ejecución y conjunto de dependencias de compilación dependen de la versión JDK. En mi ejemplo, tengo un pre-jdk6-profile
para JAXB API: antes de JDK 1.6.0 necesito incluir jaxb-api-nnn.jar
como una dependencia de compilación. Este perfil se coloca en A.pom
.¿Cómo activar un perfil de Maven en un módulo dependiente?
También tengo el módulo B:war
, que depende de A:jar
. Quiero poder activar este perfil en un servidor de compilación para compilar el archivo JDK 1.5.x entregable. Cuando ejecuto Maven con un perfil determinado activado, aparece el mensaje:
mvn -Ppre-jdk6-profile -o install
[WARNING]
Profile with id: 'pre-jdk6-profile' has not been activated.
y jaxb-api-nnn.jar
no se encuentra en B.war
resultante. Sin embargo, si activo este perfil al compilar desde el padre pom.xml
, todo está bien. Eso significa que los perfiles no se heredan de las dependencias, y el módulo principal pom.xml fue capaz de construir todo correctamente porque parece que todos los perfiles se fusionaron en el reactor.
Cambiar el perfil a parent pom empeora las cosas, ya que las dependencias se aplican a todos los demás proyectos (por ejemplo, a C:ear
). ¿Hay buenas soluciones para esta tarea, es decir, si cualquier módulo A
depende del módulo B
, entonces todas las dependencias de compilación y tiempo de ejecución que se activan por un perfil, se manejan correctamente?
El perfil de proyecto A: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>
¿Debo agregar la segunda parte al módulo 'A' o al módulo' B'? –
ambos. En el JAR con ' proporcionado ', en la aplicación web con alcance predeterminado. Pero en ambos dentro del perfil. –
Creo que solo puedo usar (b) si ejecuto compilaciones en Hudson.Gracias por tus consejos. –