2013-07-09 168 views
15

我有一些可怕的beaviour。我有以下Maven配置:Maven:將資源包含到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> 

這將創建一個包含所有課程我的JAR呸,但我在這也應包含在類路徑中的一些資源。如果我在階段package之前保留參數clean,則包括我的所有資源。如果我使用mvn clean package運行maven,則不包含任何資源。我的資源在src/main/java/com/test/(不是通常的目錄)。

+0

我看不到您在POM中使用「src/main/java/com/test /」的位置...... – Puce

回答

22

copy-resources目標配置中未正確定義資源的源目錄。另外,outputDirectory元素將資源置於target目錄中,target/classes是默認打包的內容。試試這個配置:

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

這就是說,你可能會考慮把資源${basedir}/src/main/resources,像這樣:

src 
    main 
     resources 
     customize 
     resources 
     xml 

然後,你可以完全刪除多餘的maven-resources-plugin配置,默認的生命週期將處理資源正確。

+0

使用該插件時出現nullpointerexception。 – user1007522

+0

這可能意味着你正在使用一個非常舊的插件版本,或者你有一些配置不正確。 – user944849

+0

我正在使用最新版本。 – user1007522