2011-09-08 21 views
9

Estoy convirtiendo un proyecto de aplicación de aplicaciones Ant a Maven. Tengo la mayor parte trabajando, pero estoy atascado tratando de averiguar cómo copiar algunos archivos de recursos de diferentes fuentes en función del perfil.Maven: incluye un archivo de recursos basado en el perfil

Tengo src/main/resources/persistence-{dev, prod}.xml. Uno de estos debe incluirse en el archivo war como WEB-INF/classes/META-INF/persistence.xml.

Me gustaría que la versión dev se copie cuando el perfil dev esté activo, y la versión prod cuando prod esté activo.

+1

No creo que el plugin de recursos de maven resuelva su problema porque, hasta donde yo sé, este plugin solo puede incluir o excluir archivos, no copiarlos ni cambiarles el nombre. – allaf

Respuesta

8

Simplemente use el plugin de recursos de maven como http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html y tenga una propiedad para el nombre de archivo o extensión establecida en un perfil.

+4

Su respuesta no cubre el cambio de nombre del archivo persistence.xml. – mwalter

+5

En lugar de tener diferentes nombres de archivos de origen, puede tener diferentes carpetas donde cargar el recurso y tener eso como una propiedad para que no tenga que cambiar el nombre del archivo ... –

+0

@ManfredMoser - Creo que usar propiedades personalizadas en una 'persistencia .xml' es la forma adecuada. – JimHawkins

6

Si no está casado con el paradigma de tener 3 archivos persistence.xml separados y copiar uno u otro selectivamente, puede usar perfiles maven con filtros como este (simplemente implementado este el otro día y hoy se encontró con su publicación):

En persistence.xml:

<property name="hibernate.show_sql" value="${hibernate.debug}" /> 
<property name="hibernate.format_sql" value="${hibernate.debug}" /> 

En pom.xml crear un perfil y definir la variable:

<profiles> 
    <profile> 
    <id>hib-debug</id> 
    <properties> 
     <hibernate.debug>true</hibernate.debug> 
    </properties> 
    </profile> 
</profiles> 

definen un defaul t para cuando se genera sin especificar un perfil:

<properties> 
    <hibernate.debug>false</hibernate.debug> 
</properties> 

y .... asegurarse de que encienda el filtrado de recursos:

<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
</resources> 

Luego se construye con mvn -Phib-depuración y listo! La sustitución está hecha.

Cuestiones relacionadas