2011-11-23 10 views
27

Tengo un proyecto que compilo con maven. Tengo diferentes perfiles declarados en pom.xml. Para algunos de estos perfiles, prefiero construir una guerra, y para otros perfiles prefiero un jar. Yo uso para editar manualmente el archivo pom.xml y cambiar el empaquetado variable para cualquieraCambio de embalaje en función del perfil activo en pom

<packaging>war</packaging> 

o

<packaging>jar</packaging> 

antes de hacer una

$ mvn clean package -Pchosenprofile 

¿Cómo puedo saber MVN el embalaje correspondiente a cada perfil, así que no necesito editar pom.xml?

Respuesta

75

Si desea utilizar el perfil que puede usar algo como:

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    .. 
    <packaging>${packaging.type}</packaging> 

    <profiles> 
     <profile> 
      <id>webapp</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
     </profile> 
     <profile> 
      <id>batch</id> 
      <properties> 
       <packaging.type>jar</packaging.type> 
      </properties> 
       </profile> 
      </profiles> 
</project> 
+8

Eso fue tan fácil y tan agradable que me hizo sonreír. Gracias, incluso si llegó un año tarde :). – matiasg

1

No creo que puedas.

dos alternativas que se me ocurren:

  • tienen dos módulos separados para embalaje, y llamar a uno de los que dependen del perfil
  • tienen su módulo en la guerra y ajustar el ciclo de vida (incluir/excluir construir pasos) en función del perfil para producir el frasco o su guerra

me gusta el segundo mejor enfoque - un servidor de compilación probablemente construir ambos, y un desarrollador podría utilizar los perfiles/configuraciones adecuadas para saltar del tipo no deseado.

+0

Gracias. Me gusta más el método attachClasses porque es más simple, pero podría tener que recurrir a algo como esto en una situación más compleja. – matiasg

+0

attachClasses (o similar) es lo que tenía en mente para bullet 2 - básicamente una guerra es un frasco con cosas extra - y maven es perfectamente capaz de producir ambos al mismo tiempo – ptyx

4

¿Ha mirado la configuración attachClasses del plugin war? Esta configuración simple le permitiría construir tanto una guerra como un jar (por defecto con las "clases" del clasificador) en una sola ejecución maven.

+0

Esto no es lo que tenía en mente, pero en realidad resuelve mi problema y es bastante fácil. – matiasg

Cuestiones relacionadas