2011-01-21 11 views
20

cuando creo un paquete war con maven, los archivos y directorios en el directorio "src/main/resources" se copian en/WEB-INF/classes en lugar de/WEB-INF. ¿Cómo puedo copiarlos en/WEB-INF?Maven: ¿cómo obtener un paquete de guerra con los recursos copiados en WEB-INF?

gracias, rand

ACTUALIZACIÓN: en mi pom Ahora uso la siguiente:

<plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <!-- here the phase you need --> 
        <phase>war</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>myapp/target/WEB-INF</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/resources</directory> 
           <filtering>true</filtering> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

y pongo en marcha con mvn:

mvn -Dmaven.test.skip = verdaderos recursos de paquete limpio: recursos de copia

pero obtuve: [INFO] Uno o más parámetros necesarios del complemento no son válidos o faltan para 'resources: copy-resources'

[0] Dentro de la definición para el complemento 'maven-resources-plugin' especifique lo siguiente:

... VALOR .

[1] Dentro de la definición para Plugin '-recursos maven-plugin', especifique lo siguiente:

... VALOR .

Estoy usando maven 2.2 y el fragmento básicamente es el mismo de la documentación ¿Alguna idea?

+0

no ejecute el objetivo 'resources: copy-resources', se incluye automáticamente en la fase' copy-resources' (allí en mi respuesta) – coubeatczech

Respuesta

27

configura el parámetro outputDirectory del complemento resources:resources, o coloca tus archivos en el directorio src/main/webapp/WEB-INF/. resource plugin

EDIT:

Esta configuración funciona para mí:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.4.2</version> 
    <executions> 
     <execution> 
     <id>default-copy-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <overwrite>true</overwrite> 
      <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

puede ejecutar una fase en forma somePhase o una meta somePlugin:someGoal. Las invocaciones de fase invocarán todas las metas de los complementos conectadas en fases en el intervalo [validar, fase] en orden, por lo que no es necesario llamarlas explícitamente.

+0

gracias por la respuesta, verifique mi respuesta en la actualización anterior – Randomize

+0

Se puede usar también el '$ {project.build.finalName}' en lugar de '$ {project.artifactId} - $ {project.version}' para obtener el nombre del artefacto – ivanjovanovic

24

Los recursos web no son lo mismo que los recursos java, que deben colocarse en la ruta de clase. Los recursos web se procesan a través del complemento de guerra y deben colocarse en src\main\webapp\WEB-INF\. En este caso, funcionará automáticamente sin ninguna configuración adicional en el pom.xml

+0

Pero, ¿cómo lidiar con 'java resource', si no se despliega automáticamente en el lugar requerido? – Eddy

+0

@Eddy Si no se implementa en el "lugar requerido", lo más probable es que lo coloque en el lugar equivocado de un código fuente.Da más detalles. – kan

+0

¡Tienes razón! En este caso: al usar maven y ejecutar 'mvn clean'. entonces maven no lo volverá a desplegar cuando ponga los recursos bajo 'src/main/java' en lugar de' src/main/resources'. Estoy usando eclipse. – Eddy

Cuestiones relacionadas