2008-10-03 26 views
86

¿Es posible tener un conjunto diferente de dependencias en un archivo maven pom.xml para diferentes perfiles?Diferentes dependencias para diferentes perfiles de construcción en maven

p. Ej.

mvn -P debug 
mvn -P release 

me gustaría recoger un archivo jar dependencia diferente en un perfil que tiene los mismos nombres de las clases y diferentes implementaciones de las mismas interfaces.

+0

Esto se puede utilizar cuando se dirigen a diferentes servidores web. Por ejemplo, al compilar para un servidor JavaEE 5, que ofrece bibliotecas como JAXB, que no debe incluir en su archivo war, en lugar de compilar para un servidor JavaEE 1.4, donde debe incluir el jar JAXB. – Leonel

Respuesta

135

Para citar el maven documentation on this:

elemento Un perfil contiene tanto una activación opcional (un disparador perfil) y el conjunto de cambios que deben introducirse en el POM si ese perfil ha sido activado. Por ejemplo, un proyecto creado para un entorno de prueba puede apuntar a una base de datos diferente a la de la implementación final. O las dependencias pueden extraerse de repositorios diferentes según la versión JDK utilizada.

(El subrayado es mío)

sólo hay que poner la dependencia para el perfil release dentro de la propia declaración de perfil y hacer lo mismo para debug.

 
<profiles> 
    <profile> 
     <id>debug</id> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
    <profile> 
     <id>release</id> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
</profiles> 
+0

Este método causará el código no resuelto en el modo de edición. Si la depuración está activa, faltará el jar de dependencia de la liberación y el código será un error. ¿Como resolverlo? – brucenan

+0

puede establecer el alcance de la dependencia específica de la versión como 'provisto' en la jerarquía de dependencias y restablecer el alcance a 'compilar' en la sección de perfil de publicación. De modo que la dependencia está disponible para la compilación pero no en la guerra final para el perfil de "depuración". – uday

+0

@uday Si tuvieras que dar una respuesta que muestre ese enfoque, me encantaría recitarlo – javadba

3

Su groupId, artifactId debe tokenized en sus perfiles como las propiedades y se puede mover sus dependencias a la sección genérica.

+1

Esto solo sería el caso si tienes 1 dependencia. Si el número de dependencias difiere entre la eliminación de errores y la liberación, solo la simbología no funcionará. Para ese caso, recomendaría no tokenize y explícitamente defina los deps en la sección de perfil. –

+0

La otra respuesta no me funcionó, ya que las dependencias de perfil predeterminadas todavía se incluían junto con otras dependencias de perfil específicas. Tu respuesta funcionó bien. –

Cuestiones relacionadas