# Kleines Problem mit Maven und Resourcen.



## cjs1976 (18. Jul 2012)

Hi!

Ich verwende NetBeans 7.2RC1, und habe darin ein Maven-Java-Projekt. Das Programm soll als JAR-Datei ausgegeben werden. Weiters sollen alle 3rd party Libraries in den Ordner lib kopiert werden. Dann habe ich noch ein paar Dateien unter resources, die in die Root von der JAR sollen, und ein paar Ordner unter resources, die einfach nur so in den target-Ordner kopiert werden sollen.

JAR wird korrekt gebaut (inkl. der korrekten Resourcen)
Dependencies werden in den Ordner lib kopiert.

NUR das mit dem Kopieren der zusätzlichen Ordner funktioniert nicht. Die sind klarer Weise im jar-plugin ausgeschlossen, sonst landen die ja in der JAR-Datei.

Wenn ich die dann aber über copy-resources kopiere, fehlen die 'normalen' Dateien in der JAR aus dem resources-Ordner.

Habe schon mehrere Wege versucht, immer das selbe Ergebnis...

Jetzt habe ich mir einfach einen zweiten Ordner resources2 angelegt, und kopieren dessen Inhalt von Hand. Ist auch okay, aber ich hätte es eben gerne alles sauber und automatisch.

Kann mir jemand die Lösung sagen, oder wenigstens einen Tipp geben?

Danke,
Christian.


----------



## maki (18. Jul 2012)

Ein eigenes Modul wäre eine Möglichkeit, oder aber das Buildhelper Plugin nutzen und diese Dateien zu zusätzlichen Artifakte zu erheben und dann per Dependency oder Assembly plugin an beliebige Orte kopieren wäre eine andere.

Ohne konkrete Dinge zu zeigen wird man dir keine konkrete Antwort geben können.
"Konkret" hiesse zB. deine POMs zeigen, die Dateien benennen die du als Ressourcen bezeichnest und wie das ganze dann zum Schluss aussehen soll.


----------



## kama (18. Jul 2012)

Hi,

Du kannst Dir ja mal das Projekt hier anschauen...das geht noch einige schritte weiter...eventuell gibt da ja ein paar Anregungen...

Gruß
Karl-Heinz Marbaise


----------



## cjs1976 (19. Jul 2012)

So, ich habe es jetzt ein bisschen umgebaut...

Jetzt liegen alle benötigten Ordner (4 Stück, die ich 1:1 im target Ordner brauche) und Dateien (2 Stück (log4j Konfigurationsdateien, die ich direkt in der JAR brauche).

Hier die POM, die bis auf das Kopieren der 4 Ordner alles richtig macht:

<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.cjs</groupId>
    <artifactId>jr4ao</artifactId>
    <version>2.1</version>
    <packaging>jar</packaging>

    <name>jr4ao</name>
    <url>http://www.cjs.com</url>

    <scm>
        <connection>scm:svn:https://svn.cjs.com/jr4ao/trunk/</connection>
        <developerConnection>scm:svn:https://svn.cjs.com:/jr4ao/trunk/</developerConnection>
    </scm>

    <inceptionYear>2009</inceptionYear>

    <developers>
        <developer>
            <id>cjs</id>
            <name>Christian-Josef Schrattenthaler</name>
            <email>hotline@cjs.com</email>
            <url>http://www.cjs.com</url>
            <organization>XYZ GmbH.</organization>
            <organizationUrl>http://www.cjs.com</organizationUrl>
            <roles>
                <role>Developer</role>
            </roles>
        </developer>
    </developers>

    <organization>
        <name>XYZ GmbH.</name>
        <url>http://www.cjs.com</url>
    </organization> 

    <build>
        <finalName>${project.artifactId}</finalName>
        <!-- List der aktuellen Plugins unter: Maven - Available Plugins -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <mainClass>com.cjs.jr4ao.jr4ao</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Implementation-Build>${buildNumber}</Implementation-Build>
                        </manifestEntries>
                    </archive>
                    <excludes>
                        <exclude>fonts/**</exclude>
                        <exclude>jasper/**</exclude>
                        <exclude>jrxml/**</exclude>
                        <exclude>odbc/**</exclude>
                    </excludes>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!-- Infos zu diesem Plugin unter: Build Number Maven Plugin - Introduction -->
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <doCheck>false</doCheck>
                    <doUpdate>false</doUpdate>
                    <format>{0,number}</format>
                    <items>
                        <item>buildNumber0</item>
                    </items>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.swinglabs.swingx</groupId>
            <artifactId>swingx-all</artifactId>
            <version>1.6.3</version>
        </dependency>
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
            <exclusions>
                <exclusion>
                    <artifactId>bctsp-jdk14</artifactId>
                    <groupId>org.bouncycastle</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>bcprov-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>bcmail-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>4.6.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>xmlbeans</artifactId>
                    <groupId>org.apache.xmlbeans</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>xml-apis</artifactId>
                    <groupId>xml-apis</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>poi-ooxml-schemas</artifactId>
                    <groupId>org.apache.poi</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>poi-ooxml</artifactId>
                    <groupId>org.apache.poi</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jdtcore</artifactId>
                    <groupId>eclipse</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jackson-mapper-asl</artifactId>
                    <groupId>org.codehaus.jackson</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jackson-core-asl</artifactId>
                    <groupId>org.codehaus.jackson</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>castor</artifactId>
                    <groupId>org.codehaus.castor</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jcommon</artifactId>
                    <groupId>jfree</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.12</version>
            <exclusions>
                <exclusion>
                    <artifactId>jcommon</artifactId>
                    <groupId>jfree</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.jgoodies</groupId>
            <artifactId>jgoodies-common</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.jgoodies</groupId>
            <artifactId>jgoodies-forms</artifactId>
            <version>1.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
</project>

Wenn ich jetzt in der pom.xml die Ordner über resources angebe, fehlen die log4j Dateien in der JAR. Wenn ich das log4j Zeug über includes einbinde, ist sonst nichts mehr in der JAR.

Irgendwo habe ich da einen Denkfehler!?

Angeblich gibt es bei maven auch eine copy-Funktion, die ich aber nicht finden kann.

Alternativ würde sich auch ein AntTask anbieten, aber davon wird ständig abgeraten!?

Danke,
Christian.


----------

