2013-07-09 72 views
15

Tôi có một số beaviour khủng khiếp. Tôi có cấu hình Maven sau:Maven: Bao gồm các tài nguyên vào 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> 

Điều này tạo ra JAR fie chứa tất cả các lớp, nhưng tôi cũng có một số tài nguyên trong lớp học. Nếu tôi để tham số clean ở phía trước của giai đoạn package, tất cả tài nguyên của tôi sẽ được bao gồm. Nếu tôi chạy maven với mvn clean package, không có bất kỳ tài nguyên nào được bao gồm. Tài nguyên của tôi dưới src/main/java/com/test/ (không phải thư mục thông thường).

+0

Tôi không nhìn thấy nơi bạn đang sử dụng "src/main/java/com/test /" trong POM của bạn ... – Puce

Trả lời

22

Thư mục nguồn cho tài nguyên không được xác định chính xác trong cấu hình mục tiêu copy-resources. Ngoài ra, phần tử outputDirectory đặt các tài nguyên trong thư mục target, khi target/classes là những gì được đóng gói theo mặc định. Hãy thử cấu hình này:

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

Điều đó nói rằng, bạn có thể cân nhắc việc đưa các nguồn lực trong ${basedir}/src/main/resources, như vậy:

src 
    main 
     resources 
     customize 
     resources 
     xml 

Sau đó, bạn có thể loại bỏ các phụ maven-resources-plugin cấu hình hoàn toàn, vòng đời mặc định sẽ xử lý tài nguyên chính xác.

+0

khi sử dụng plugin đó tôi nhận được một nullpointerexception. – user1007522

+0

Điều này có thể có nghĩa là bạn đang sử dụng một phiên bản rất cũ của plugin hoặc bạn đã cấu hình một cái gì đó không chính xác. – user944849

+0

Tôi đang sử dụng phiên bản mới nhất. – user1007522