2010-08-11 123 views
13

我想將一些資源添加到jar文件中。我「分析」它並將它們添加到構建部分。未放入jar文件的maven資源

但資源不在最終的jar文件中。

這裏去我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> 

在這裏,我發出命令:

有什麼不對?

回答

11

您的POM片段看起來很好,我無法重現您的問題。下面是我用的pom.xml:

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

具有以下項目結構:

 
$ 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 

,這裏是我所得到的:

 
$ 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 

按預期工作。

+1

@帕斯卡爾:非常好的答案。我有和你一樣的pom.xml文件,它不會在jar文件中包含正確的文件。我會稍後用更新版本的maven2(我的是2.0.9)來嘗試。謝謝你的時間! – ssedano 2010-08-12 11:36:41

+0

@Udo我的確在使用Maven 2.2.1 – 2010-08-12 13:04:23

+0

@Pascal和amra:現在我開始工作了,謝謝!但如果我想將文件放在根文件夾(jar)中? targetPath> target/myProject does not work – ssedano 2010-08-13 14:00:37

5

在maven中可以用兩種方式指定資源。簡單的只是複製到目標/類目錄的目錄。您可以只配置resource directories,filteringincluded/excluded files。默認資源目錄是src/main/resources

對於複雜的設置,您需要配置maven插件。當您運行安裝following actions run。在包裝階段運行maven-resources-plugin資源:資源目標。

僅供配置使用resources mojo parameters。見example

將您的資料移動到$ {projectdir}/profiles/myFolder

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

可以省略包括一部分,如果型材/ MyFolder中僅包含的文件包括。

+0

謝謝你的時間,正如我對帕斯卡爾說的,我會嘗試升級maven,我會發布結果。謝謝。 – ssedano 2010-08-12 11:37:18

3

嘗試這種簡單的結構,這是爲我工作。

<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

問題是:<targetPath>.</targetPath>,啓動它解決問題。

打包jar maven使用target/classes文件夾的內容,否則使用maven-jar-plugin並配置自己要拷貝的內容。