2010-08-11 25 views
13

Deseo agregar algunos recursos a un archivo jar. Lo "perfilé" y lo agregué en la sección de construcción.recursos maven no ubicados en el archivo jar

Pero los recursos no están en el archivo jar final.

Aquí va la sección del perfil de mi pom.xml:

<profile> 
    <id>myProfile</id> 
    <build> 
    <finalName>name</finalName> 
    <resources> 
     <resource> 
     <targetPath>.</targetPath> 
     <filtering>false</filtering> 
     <directory>${basedir}/profiles/myFolder</directory> 
     <includes> 
      <include>file.txt</include> 
      <include>file.xml</include> 
     </includes> 
     </resource> 
    </resources> 
    </build> 
</profile> 

Y aquí el comando expido:

lo que está mal?

Respuesta

11

Su fragmento de POM se ve globalmente bien y no puedo reproducir su problema. Aquí está el pom.xml utilicé:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow</groupId> 
    <artifactId>Q3459013</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <profiles> 
    <profile> 
     <id>myProfile</id> 
     <build> 
     <finalName>name</finalName> 
     <resources> 
      <resource> 
      <directory>${basedir}/profiles/myFolder</directory> 
      <filtering>false</filtering> 
      <includes> 
       <include>file.txt</include> 
       <include>file.xml</include> 
      </includes> 
      </resource> 
     </resources> 
     </build> 
    </profile> 
    </profiles> 
</project> 

con la siguiente estructura del proyecto:

 
$ tree . 
. 
├── pom.xml 
├── profiles 
│   └── myFolder 
│    ├── file.txt 
│    └── file.xml 
└── src 
    ├── main 
    │   └── java 
    │    └── com 
    │     └── stackoverflow 
    │      └── App.java 
    └── test 
     └── java 
      └── com 
       └── stackoverflow 
        └── AppTest.java 

11 directories, 5 files 

Y aquí es lo que me pasa:

 
$ mvn clean install -PmyProfile 
... 
$ cd target 
$ tree . 
. 
├── classes 
│   ├── com 
│   │   └── stackoverflow 
│   │    └── App.class 
│   ├── file.txt 
│   └── file.xml 
├── maven-archiver 
│   └── pom.properties 
├── name.jar 
├── surefire-reports 
│   ├── com.stackoverflow.AppTest.txt 
│   └── TEST-com.stackoverflow.AppTest.xml 
└── test-classes 
    └── com 
     └── stackoverflow 
      └── AppTest.class 
$ jar xvf name.jar 
    created: META-INF/ 
inflated: META-INF/MANIFEST.MF 
    created: com/ 
    created: com/stackoverflow/ 
inflated: file.xml 
inflated: com/stackoverflow/App.class 
inflated: file.txt 
    created: META-INF/maven/ 
    created: META-INF/maven/com.stackoverflow/ 
    created: META-INF/maven/com.stackoverflow/Q3459013/ 
inflated: META-INF/maven/com.stackoverflow/Q3459013/pom.xml 
inflated: META-INF/maven/com.stackoverflow/Q3459013/pom.properties 

funciona como se espera.

+1

@Pascal: muy buena respuesta. Tengo el mismo pom.xml que usted. No incluye en el archivo jar los archivos adecuados. Lo intentaré más adelante con una versión más nueva de maven2 (la mía es 2.0.9). ¡Gracias por tu tiempo! – ssedano

+0

@Udo Estoy usando Maven 2.2.1 –

+0

@Pascal y amra: ¡Ahora lo tengo que trabajar gracias! pero si quiero colocar los archivos en la carpeta raíz (jar)? targetPath> target/myProject doesnt work – ssedano

5

Los recursos se pueden especificar de dos maneras en maven. Los sencillos son solo directorios que se copian al directorio target/classes. Solo puede configurar resource directories, filtering y included/excluded files. El directorio de recursos predeterminado es src/main/resources.

Para configuraciones complejas, necesita configurar el plugin maven. Cuando ejecuta instalefollowing actions run. En la fase de empaquetado ejecuta maven-resources-plugin con recursos: recursos objetivo.

Para la configuración, utilice solo resources mojo parameters. Ver example.

Mueva sus perfiles a $ {projectdir}/profiles/myFolder.

<resources> 
    <resource> 
     <directory>profiles/myFolder</directory> 
     <includes> 
      <include>file.txt</include> 
      <include>file.xml</include> 
     </includes> 
    </resource> 
</resources> 

Se puede omitir si incluye parte perfiles/miCarpeta contiene sólo los archivos que desea incluir.

+0

Gracias por su tiempo, como le dije a Pascal, intentaré actualizar a maven y publicaré los resultados. Gracias. – ssedano

3

Prueba este tipo de estructura simple, esto funciona para mí.

<profile> 
     <id>myProfile</id> 
     <build> 
     <finalName>name</finalName> 
     <resources> 
      <resource> 
       <targetPath>webapp</targetPath> 
       <directory>src/main/webapp</directory> 
      </resource> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 
     </build> 
    </profile> 
2

El problema es: <targetPath>.</targetPath>, golpearlo con el pie fuera de solucionar un problema.

Para empacar jar maven utiliza el contenido de la carpeta target/classes, de lo contrario use maven-jar-plugin y configure lo que debe copiar.

Cuestiones relacionadas