2009-01-21 13 views
8

Estoy usando el complemento Maven Application Assembler para generar ejecutables independientes de mi proyecto Java. La aplicación lee en archivos de configuración, incluidos los archivos de Spring. El complemento Application Assembler tiene una opción (activada de manera predeterminada) para agregar un directorio etc/a la ruta de clases de la aplicación, pero ¿qué debo hacer para que el complemento copie mis archivos de configuración a este directorio?¿Dónde debo colocar los archivos de configuración de la aplicación para un proyecto Maven?

O, en general, ¿dónde se encuentra en Maven la ubicación kosher para los archivos de configuración de la aplicación que NO se deben empaquetar en el artefacto?

Respuesta

1

No sé si lo entiendo correctamente. Pero lo que he hecho en el pasado para un proyecto en el que necesitaba copiar archivos de configuración, es utilizar el Maven AntRun plugin. Lo que hice fue ejecutar el complemento en la fase de recursos de proceso y copiar mis archivos de configuración al directorio especificado usando la tarea de copia de Ant. El complemento Assembler se ejecuta en la fase del paquete, por lo que debería recoger los archivos de configuración si los coloca en el lugar correcto. Espero que esto responda tu pregunta un poco.

+0

Sí Calculo que sería la forma más sencilla de hacerlo manualmente. Me preguntaba si el complemento appassembler podría hacer esto por usted, es decir, recoger archivos de configuración de, digamos, src/etc y copiarlos a $ {appname}/etc. – lindelof

6

También puede utilizar el filtrado de recursos: http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

a su vez en el filtrado:

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

crea un fichero src/main/resources como: Application.properties

application.properties

configprop.1=${param1} 
configprop.2=${param2} 

A continuación, configure un perfil y establezca algunas propiedades en un archivo settings.xml que establece diferentes propiedades según si se trata de una versión de desarrollo o de producción. ver: http://maven.apache.org/guides/introduction/introduction-to-profiles.html

tengo establecer diferentes propiedades dependiendo de si este es el servidor de compilación, dev o una implementación de producción

mvn -Denv = dev || mvn -Denv = dev-build || mvn -Denv = producción

El enlace maven tiene una muy buena descripción.

3

Puede probar el complemento ensamblador maven. Lo usé junto con el complemento appassembler.

Configure appassembler para que apunte al nombre que desee para su directorio de configuración, si no desea 'etc'. El complemento de ensamblaje ensambla todo en su propio directorio de salida, así que configuro el plugin de ensamblaje para copiar los directorios bin y repo del directorio appassembler en su directorio de salida, luego lo copio en los archivos de configuración (los míos están en src/main/config) en el dir de configuración esperado. Hay algo de duplicación en esto, porque estás copiando las salidas appassembler, pero eso realmente no me molestó.

Entonces, lo que tiene después de ejecutar el complemento de ensamblaje es su bin, repo y config dir son todos los directorios pares bajo el directorio de salida del ensamblado. Puede configurarlo para que tenga una estructura diferente si lo prefiere, solo quería que el mío reflejara la estructura appassembler.

Lo bueno es que también puede configurar el complemento de ensamblaje para cambiar sus binarios a ejecutables, lo que no puedo ver cómo hacer con appassembler. Y, si luego vincula un appassembler: ensamble y ensamble: objetivos únicos para la fase del paquete, todo lo que tiene que hacer es 'paquete mvn' y ensambla todo.

3

Para las personas que han venido a este, más recientemente, existe, desde la versión 1.1 del ensamblador Plugin de aplicación, los parámetros opcionales configurationSourceDirectory y copyConfigurationDirectory. Por favor, encontrar en un ejemplo pom.xml extraer a continuación:

<configuration> 
    <!-- Set the target configuration directory to be used in the bin scripts --> 
    <configurationDirectory>conf</configurationDirectory> 
    <!-- Copy the contents from "/src/main/config" to the target 
     configuration directory in the assembled application --> 
    <copyConfigurationDirectory>true</copyConfigurationDirectory> 
    <!-- Include the target configuration directory in the beginning of 
     the classpath declaration in the bin scripts --> 
    <includeConfigurationDirectoryInClasspath> 
    true 
    </includeConfigurationDirectoryInClasspath> 
... 
</configuration> 

Más información es here

0

que había estado buscando una respuesta a lo que creo que es su pregunta, o al menos una pregunta muy similar. Maven le permite especificar directorios de recursos usando el maven-resources-plugin. Tengo algunos archivos de configuración en uno de mis directorios de recursos. Me he dado cuenta de que al poner copias de esos archivos en el directorio etc/que usted menciona (que está al comienzo de mi CLASSPATH) puedo cambiar los valores en esos archivos para usarlos en tiempo de ejecución. Entonces quería tener ese directorio etc/creado con copias de todo desde mi directorio de recursos de forma predeterminada. El objetivo copy-resources del maven-resources-plugin me permitió hacer eso. Esta estrofa de ejemplos> copiar recursos en la barra lateral izquierda (estoy limitado a 2 enlaces en este post) es lo que hizo por mí:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
      <execution> 
      <id>copy-resources</id> 
      <!-- here the phase you need --> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/target/extra-resources</outputDirectory> 
       <resources>   
       <resource> 
        <directory>src/non-packaged-resources</directory> 
        <filtering>true</filtering> 
       </resource> 
       </resources>    
      </configuration>    
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 
Cuestiones relacionadas