2010-08-11 12 views
13

Ich möchte zu einer JAR-Datei einige Ressourcen hinzufügen. Ich "profilierte" es und fügte sie im Build-Abschnitt hinzu.Maven Ressourcen nicht in JAR-Datei

Die Ressourcen befinden sich jedoch nicht in der endgültigen JAR-Datei.

Hier geht es der Profilabschnitt meines 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> 

Und hier der Befehl, den ich ausgeben:

Was ist los?

Antwort

11

Ihr POM-Snippet sieht global gut aus und ich kann Ihr Problem nicht reproduzieren. Hier ist die pom.xml ich verwendet:

<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> 

mit folgenden Projektstruktur:

 
$ 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 

Und hier ist das, was ich bekommen:

 
$ 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 

wie erwartet funktioniert.

+1

@Pascal: sehr nette Antwort. Ich habe die gleiche pom.xml wie Sie es nicht in der JAR-Datei die richtigen Dateien enthalten. Ich werde später mit einer neueren Version von maven2 versuchen (meins ist 2.0.9). Danke für deine Zeit! – ssedano

+0

@Udo Ich verwende tatsächlich Maven 2.2.1 –

+0

@Pascal und amra: Jetzt habe ich es zur Arbeit, danke! aber wenn ich die Dateien im Stammordner (jar) platzieren möchte? targetPath> target/myProject funktioniert nicht – ssedano

5

Ressourcen können auf zwei Arten in Maven angegeben werden. Das einfache sind nur Verzeichnisse, die nach Ziel/Klassen Verzeichnis kopiert werden. Sie können einfach resource directories, filtering und included/excluded files konfigurieren. Das Standardressourcenverzeichnis ist src/main/resources.

Für komplexe Einstellungen müssen Sie Maven Plugin konfigurieren. Wenn Sie ausführen, installieren Siefollowing actions run. In der Verpackungsphase läuft Maven-Ressourcen-Plugin mit Ressourcen: Ressourcen Ziel.

Verwenden Sie für die Konfiguration nur resources mojo parameters. Siehe example.

Verschieben Sie Ihre Profile auf $ {projectdir}/profiles/myFolder.

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

können Sie weglassen umfasst einen Teil, wenn Profile/myFolder nur Dateien enthält, einschließen.

+0

Vielen Dank für Ihre Zeit, wie ich zu Pascal sagte, ich werde versuchen, Maven upgraden und ich werde Ergebnisse posten. Vielen Dank. – ssedano

3

Versuchen Sie diese einfache Struktur, das funktioniert für mich.

<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

Problem ist: <targetPath>.</targetPath>, es Problem zu beheben pfiffen.

Zum packen von jar maven verwendet man den Inhalt des target/classes Ordners, ansonsten benutze maven-jar-plugin und konfiguriere self was zu kopieren ist.

Verwandte Themen