2010-08-11 27 views
13

Desidero aggiungere a un file jar alcune risorse. L'ho "profilato" e aggiunto nella sezione di compilazione.risorse maven non inserite nel file jar

Ma le risorse non sono nel file jar finale.

Qui si va alla sezione del profilo del mio 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> 

E qui il comando I edizione:

cosa c'è di sbagliato?

risposta

11

Lo snippet POM ha un aspetto globalmente soddisfacente e non riesco a riprodurre il problema. Ecco l'pom.xml ho usato:

<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 seguente struttura del progetto:

 
$ 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 

E qui è quello che ottengo:

 
$ 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 

funziona come previsto.

+1

@Pascal: risposta molto bella. Ho lo stesso pom.xml che continua a non includere nel file jar i file corretti. Proverò più tardi con una versione più recente di maven2 (il mio è 2.0.9). Grazie per il tuo tempo! – ssedano

+0

@Udo Sto davvero usando Maven 2.2.1 –

+0

@Pascal e amra: Ora ho capito di funzionare grazie! ma se voglio mettere i file nella cartella principale (jar)? targetPath> target/myProject non funziona – ssedano

5

Le risorse possono essere specificate in due modi in modalità Maven. Quelle semplici sono solo directory che vengono copiate nella directory destinazione/classi. È sufficiente configurare resource directories, filtering e included/excluded files. La directory delle risorse di default è src/main/resources.

Per impostazioni complesse è necessario configurare il plug-in Maven. Quando esegui installafollowing actions run. In fase di confezionamento corre maven-resources-plugin con risorse: risorse obiettivo.

Per la configurazione utilizzare solo resources mojo parameters. Vedi example.

Spostare i profili su $ {projectdir}/profiles/myFolder.

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

È possibile omettere include parte se profili/myFolder contiene solo file da includere.

+0

Grazie per il vostro tempo, come ho detto a Pascal, proverò ad aggiornare Maven e posterò i risultati. Grazie. – ssedano

3

Prova questo tipo di struttura semplice, questo funziona per me.

<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

Il problema è: <targetPath>.</targetPath>, calci fuori per risolvere problema.

Per imballare jar, Maven utilizza il contenuto della cartella target/classes, altrimenti usa maven-jar-plugin e configura autonomamente cosa copiare.

Problemi correlati