Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven: Include resources into JAR

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

like image 902
Marcel Avatar asked Jul 09 '13 13:07

Marcel


People also ask

How do I add resources to my jar Maven?

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>

How do I add a resource file to a jar file?

1) click project -> properties -> Build Path -> Source -> Add Folder and select resources folder. 2) create your JAR!

Where do I put resources in POM xml?

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.

What is Maven jar plugin?

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.


1 Answers

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.

like image 61
user944849 Avatar answered Oct 07 '22 20:10

user944849