2012-01-04 17 views
7

Quiero usar maven para reemplazar algunos de mis archivos * .properties en mi archivo war.Recursos de Maven No copiando archivos

Por lo tanto, creé carpetas dev, test y prod en mi carpeta de recursos. Ahora solo quiero tener una de estas carpetas usadas en la ruta de la carpeta de recursos en mi archivo war al ejecutar el perfil correspondiente. El resultado es que maven está copiando todas las otras carpetas, así que esas son dobles en la ruta de clases. Aquí está mi configuración:

<profile> 
     <id>dev</id> 

     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 

     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.3</version> 
        <executions> 
         <execution> 
          <id>copy-dev-resources</id> 
          <phase>process-resources</phase> 
          <goals> 
           <goal>copy-resources</goal> 
          </goals> 
          <configuration> 

           <overwrite>true</overwrite> 

           <outputDirectory>${basedir}/target/classes</outputDirectory> 
           <resources> 
            <resource> 
             <!-- source --> 
             <directory>src/main/resources/dev</directory> 
            </resource> 
           </resources> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

¿Cómo configuro Maven ahora que su única copia del contenido de la carpeta src// recursos/dev/principal para orientar las clases?

Gracias por su ayuda

Respuesta

7

Maven por copias por defecto todos los archivos en "src/main/resources" a la carpeta de salida, por lo que en su configuración actual es probablemente crearía "dev", "prueba" y " prod "carpetas con sus contenidos y, a continuación, copie los recursos de desarrollo sin un prefijo" dev ".

Sugiero dejar la carpeta de recursos predeterminada tal como está y usarla solo para recursos independientes del perfil. En su perfil, a continuación, puede configurar las carpetas de recursos adicionales:

<profile> 
    <id>dev</id> 
    <build> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources-dev</directory> 
      </resource> 
     </resources> 
    </build> 
</profile> 

También debe ser posible configurar esto en la sección de construcción común el uso de propiedades definidas en los perfiles:

<build> 
    <resources> 
     <resource> 
      <directory>${basedir}/src/main/resources-${projectStage}</directory> 
     </resource> 
    </resources> 
</build> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <projectStage>dev</projectStage> 
     </properties> 
    </profile> 
</profiles> 

Si por alguna razón no puede cambiar su estructura de directorio actual, entonces tendría que configurar exclusiones para la carpeta de recursos predeterminada para no copiar las carpetas anidadas dependientes del perfil:

<build> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources</directory> 
       <excludes> 
        <exclude>dev/**</exclude> 
        <exclude>test/**</exclude> 
        <exclude>prod/**</exclude> 
       </excludes> 
      </resource> 
     </resources> 
    </build> 
1

La parte "principal" en la estructura de directorios maven existe para este propósito. En lugar de crear directorios dentro del directorio de recursos, debe crear más directorios en su directorio src. Este es el comportamiento predeterminado, y ya está implementado al permitir que los recursos de prueba anulen los recursos principales durante las fases de prueba del ciclo de vida de maven.

Su estructura debería tener este aspecto:

src 
    main 
    resources 
     a.properties 
     b.properties 
     c.properties 
    test 
    resources 
     b.properties 
     c.properties 
    dev 
    resources 
     b.properties 

Con esta estructura, su objetivo "principal" tendrá los archivos de propiedades por defecto, las fases de prueba podrían sobrescribir temporalmente B y C, y el perfil de dev sólo se sobrescribe b con otra versión personalizada, en el despliegue final.

Para lograr esto, debe configurar el maven-resources-plugin como lo hace en nuestra pregunta, para un perfil dev.

Y cuando lo haga, también tenga en cuenta: ¿qué versión de los archivos de propiedades debe usar al ejecutar las pruebas unitarias mientras compila usando el perfil dev?

0

que estaba usando el archivo en assembly.xml experto y se utiliza este conjunto de código para asegurarse de que mi archivo de recursos estaba en el directorio raíz de la aplicación ...

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

<id>distribution</id> 
<formats> 
    <format>tar.gz</format> 
</formats> 
<fileSets> 
    <fileSet> 
     <directory>${basedir}</directory> 
     <includes> 
      <include>bin/**</include> 
      <include>webapps/**</include> 
      <include>data/**</include> 
     </includes> 
    </fileSet> 
    <fileSet> 
     <directory>${basedir}/target</directory> 
     <includes> 
      <include>*.jar</include> 
     </includes> 
     <outputDirectory>lib</outputDirectory> 
    </fileSet> 
    <fileSet> 
     <directory>${basedir}/src/main/</directory> 
     <includes> 
      <include>resources/**</include> 
     </includes> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
</fileSets> 

<dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <useProjectArtifact>false</useProjectArtifact> 
    </dependencySet> 
</dependencySets> 

    </assembly> 

No sé si esta es la mejor manera, pero era una que podía visualizar.

Cuestiones relacionadas