I have some terrible beaviour. I have the following Maven configuration:
<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> <artifactId>Test2Certificate</artifactId> <version>0.1.0-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>com.test</groupId> <artifactId>build</artifactId> <version>1.0.0</version> </parent> <properties> <compile.java.version>1.7</compile.java.version> <file.product.version>0.1.0.0</file.product.version> <maven.build.timestamp.format>yyyy-MM-dd HH:mm:SSS</maven.build.timestamp.format> </properties> <pluginRepositories> <pluginRepository> <id>launch4j-xml-plugin-repo</id> <name>launch4j-xml-plugin Repository for Maven</name> <url>https://launch4j-xml-plugin.googlecode.com/svn/repo</url> </pluginRepository> </pluginRepositories> <build> <finalName>${project.artifactId}_${project.version}</finalName> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.2</version> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> <configuration> <doCheck>false</doCheck> <doUpdate>false</doUpdate> </configuration> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target</outputDirectory> <includeEmptyDirs>true</includeEmptyDirs> <resources> <resource> <targetPath>${basedir}/target/customize</targetPath> <directory>customize</directory> <filtering>false</filtering> </resource> <resource> <targetPath>${basedir}/target/resources</targetPath> <directory>resources</directory> <filtering>false</filtering> </resource> <resource> <targetPath>${basedir}/target/xml</targetPath> <directory>xml</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <appendAssemblyId>false</appendAssemblyId> <archive> <manifest> <mainClass>com.dscsag.dsct2c.main.MainClass</mainClass> </manifest> <manifestEntries> <SplashScreen-Image>com/dscsag/dsct2c/resources/icons/loader/splash_screen.png</SplashScreen-Image> <SCM-Revision>${buildNumber}</SCM-Revision> <Project-Version>${project.version}</Project-Version> <Build-Date>${maven.build.timestamp}</Build-Date> <Project-Name>${project.artifactId}_${project.version}</Project-Name> </manifestEntries> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jarsigner-plugin</artifactId> <version>1.2</version> <executions> <execution> <id>sign</id> <goals> <goal>sign</goal> </goals> </execution> </executions> <configuration> <keystore>src/main/resources/jarsigner/keystore/dsct2c.keystore</keystore> <alias>dsct2c</alias> <storepass>DSCTest2Certificate</storepass> <keypass>DSCTest2Certificate</keypass> </configuration> </plugin> <plugin> <groupId>org.bluestemsoftware.open.maven.plugin</groupId> <artifactId>launch4j-plugin</artifactId> <version>1.5.0.0</version> <executions> <execution> <id>l4j-gui</id> <phase>package</phase> <goals> <goal>launch4j</goal> </goals> <configuration> <headerType>gui</headerType> <outfile>target/${project.artifactId}_${project.version}.exe</outfile> <jar>target/${project.artifactId}_${project.version}.jar</jar> <errTitle>${project.artifactId} ${project.version} - Error</errTitle> <icon>src/main/java/com/dscsag/dsct2c/resources/icons/DSCT2C.ico</icon> <jre> <path>jre7</path> <minVersion>1.7.0_17</minVersion> <initialHeapSize>128</initialHeapSize> <maxHeapSize>512</maxHeapSize> </jre> <versionInfo> <fileVersion>1.0.0.0</fileVersion> <txtFileVersion>1.0</txtFileVersion> <fileDescription>Tool to certificate third-party products/adaptor.</fileDescription> <copyright>DSC Software AG</copyright> <productVersion>${file.product.version}</productVersion> <txtProductVersion>${file.product.version}</txtProductVersion> <productName>${project.artifactId}</productName> <internalName>${project.artifactId}</internalName> <originalFilename>${project.artifactId}_${project.version}.exe</originalFilename> </versionInfo> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.2</version> </dependency> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.6</version> <scope>test</scope> </dependency> <dependency> <groupId>org.swinglabs.swingx</groupId> <artifactId>swingx-all</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>com.toedter</groupId> <artifactId>jcalendar</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>com.jgoodies</groupId> <artifactId>jgoodies-common</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>com.jgoodies</groupId> <artifactId>jgoodies-looks</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>dsct2c.help</groupId> <artifactId>pdf_render</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>dsct2c.help</groupId> <artifactId>jh</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>dsct2c.help</groupId> <artifactId>hsviewer</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>dsct2c.help</groupId> <artifactId>dsct2c_help</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.8</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> </dependency> </dependencies> </project>
This creates my JAR fie containing all classes, but I have some resources in the class path which should be included also. If I leave the parameter clean
in front of the phase package
, all my resources are included. If I run maven with mvn clean package
, there aren't any resources included. My resources are under src/main/java/com/test/
(not the usual directory).
To include a resource, we only need to add an <includes> element. And to exclude a resource, we only need to add an <excludes> element. For example, if we want to include all text and RTF files under our src/my-resources directory and in all its subdirectories, we can do the following: <project>
1) click project -> properties -> Build Path -> Source -> Add Folder and select resources folder. 2) create your JAR!
Via the resources area in the pom you can filter files from their way src/main/resources to the target/classes folder. The lifecycle of Maven is not influenced by this. I have added resources successfully in . Jar file.
The maven jar plugin provides the capability to build jars files, if you define that your project is packaged as a jar file, maven will call implicitely to this plugin. We don´t need to define it inside pom. xml it will be downloaded and executed when maven needs it.
The source directories for the resources are not defined correctly in the copy-resources
goal configuration. Also, the outputDirectory element puts the resources in the target
dir, when target/classes
is what gets packaged by default. Try this config:
<configuration> <outputDirectory>${basedir}/target/classes</outputDirectory> <includeEmptyDirs>true</includeEmptyDirs> <resources> <resource> <directory>${basedir}/src/main/java/com/test/customize</directory> <filtering>false</filtering> </resource> <resource> <directory>${basedir}/src/main/java/com/test/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>${basedir}/src/main/java/com/test/xml</directory> <filtering>false</filtering> </resource> </resources> </configuration>
That said, you might consider putting the resources in ${basedir}/src/main/resources
, like so:
src main resources customize resources xml
Then, you could remove the extra maven-resources-plugin
config entirely, the default lifecycle will process the resources correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With