2013-07-09 22 views
15

Ho un pessimo affare. Ho la seguente configurazione Maven:Maven: Includi risorse in JAR

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

Questo crea la mia fie JAR che contiene tutte le classi, ma ho alcune risorse nel percorso di classe che dovrebbe essere incluso anche. Se lascio il parametro clean di fronte alla fase package, tutte le mie risorse sono incluse. Se eseguo Maven con mvn clean package, non ci sono risorse incluse. Le mie risorse sono sotto src/main/java/com/test/ (non nella solita directory).

+0

Non vedo dove si sta utilizzando "src/main/java/com/test /" nel proprio POM ... – Puce

risposta

22

Le directory di origine per le risorse non sono definite correttamente nella configurazione dell'obiettivo copy-resources. Inoltre, l'elemento outputDirectory mette le risorse nella directory target, quando è ciò che viene impacchettato per impostazione predefinita. Prova questo 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> 

Detto questo, si potrebbe valutare l'ipotesi di risorse in ${basedir}/src/main/resources, in questo modo:

src 
    main 
     resources 
     customize 
     resources 
     xml 

Quindi, è possibile rimuovere il maven-resources-plugin config in più del tutto, il ciclo di vita di default elaborerà la risorse correttamente.

+0

quando si utilizza quel plug-in sto ricevendo un'eccezione nullapoint. – user1007522

+0

Questo probabilmente significa che stai usando una versione molto vecchia del plugin o se hai qualcosa configurato in modo errato. – user944849

+0

Sto usando l'ultima versione. – user1007522