Maven: Include resources into JAR

92,718

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.

Share:
92,718
marc3l
Author by

marc3l

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” - Martin Fowler 0110110101100001011100100110001101100101011011000110100001101111011001010110110001101100001011100110010001100101

Updated on July 11, 2020

Comments

  • marc3l
    marc3l almost 4 years

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

  • user944849
    user944849 over 9 years
    This probably means you are using a very old version of the plugin or you have something configured incorrectly.
  • user1007522
    user1007522 over 9 years
    I'm using the latest version.
  • user944849
    user944849 over 9 years
    You probably need to open another question describing the specific problem and providing all the relevant details including the directory structure, POM, and error.
  • dopatraman
    dopatraman about 4 years
    what is basedir?