I want to add to a jar file some resour开发者_C百科ces. I "profiled" it and added them in the build section.
But the resources aren't in the final jar file.
Here it goes the profile section of my 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>
And here the command I issue:
mvn clean install -PmyProfile
What's wrong?
Your POM snippet looks globally fine and I cannot reproduce your problem. Here is the pom.xml I used:
<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>
With the following project structure:
$ 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
And here is what I get:
$ 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
Works as expected.
Resources can be specified in two ways in maven. The simple one are just directories which are copied to target/classes directory. You can just configure resource directories, filtering and included/excluded files. Default resource directory is src/main/resources.
For complex setting you need to configure maven plugin. When you run install following actions run. In packaging phase runs maven-resources-plugin with resources:resources goal.
For the configuration use only resources mojo parameters. See example.
Move your profiles to ${projectdir}/profiles/myFolder.
<resources>
<resource>
<directory>profiles/myFolder</directory>
<includes>
<include>file.txt</include>
<include>file.xml</include>
</includes>
</resource>
</resources>
You can omit includes part if profiles/myFolder contains only files to include.
Try this kind of simple structure, this is working for 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>
Problem is: <targetPath>.</targetPath>, kick it off to fix problem.
To pack jar maven uses content of target/classes folder, otherwise use maven-jar-plugin and configure self what to copy.
加载中,请稍侯......
精彩评论