2014-02-10 101 views
7

我的項目結構在src/main /文件夾中有資源文件夾。資源文件夾包含文件server.properties。我的pom如下:如何使用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> 

    <groupId>com.fde</groupId> 
    <artifactId>Listener</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Listener</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <hibernate.version>3.6.10.Final</hibernate.version> 
     <java.version>1.6</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <!-- Hibernate dependencies START --> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-ehcache</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>3.2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.9</version> 
     </dependency> 
     <!-- Hibernate dependencies END --> 
    </dependencies> 
    <build> 
     <sourceDirectory>src/main/java</sourceDirectory> 
     <resources> 
      <resource> 
       <directory>resources</directory> 
      </resource> 
     </resources> 
     <testSourceDirectory>src/test/java</testSourceDirectory> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>com.fde.ListenerServer</mainClass> 
           </transformer> 
           <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> 
            <resource>resources</resource> 
            <file>server.properties</file> 
           </transformer> 
          </transformers> 
          <artifactSet> 
           <excludes> 

            <exclude>junit:junit</exclude> 

           </excludes> 
          </artifactSet> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 
</project> 

Jar已正確創建,主類在清單中提到。我有以下問題:

  1. 目標文件夾包含類文件夾whch有類文件。該罐子也包含它們,爲什麼他們需要。我的目標是隻有一個可執行的jar包含所有依賴項。

  2. 資源沒有被添加到jar中。我已經根據網上看到的說明添加了變壓器,但沒有用!

  3. 在目標文件夾中創建的其他目錄(maven-archiver,surefire,surefire-reports等)?

  4. 另一個罐子被創建每次我做一個maven乾淨的安裝(原來的監聽.... JAR)

時候,我絕對沒有關於如何將資源線索。任何幫助表示讚賞!

EDIT :::

這是我用於行家組裝-插件標記:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>attached</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
    <archive> 
      <manifest> 
       <mainClass>com.fde.ListenerServer</mainClass> 
      </manifest> 
      </archive> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    </plugin> 

這創造監聽-1.0-快照罐與 - dependencies.jar與所有來自文件夾中引用的jar的類。清單還包含主類。

問題仍然是我不能將資源包包含在\ src \ main \ resources文件夾中。

另外我不明白爲什麼從我的代碼中引用的jar文件包含在jar以及META-INF文件夾中。

+0

您是否嘗試過使用jar-with-dependencies描述符的maven-assembly-plugin? – khmarbaise

+0

看到我的編輯問題 – kavita

回答

5

我從pom.xml中刪除了以下內容,屬性文件包含在根目錄下。

<sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
     <resource> 
     <directory>resources</directory> 
     </resource> 
    </resources> 
    <testSourceDirectory>src/test/java</testSourceDirectory> 

還沒有想出爲什麼在罐子裏重複引用的類。

3

的問題是不是在你的Maven遮陽簾插件的配置,而你已經明確設置資源目錄到錯誤的路徑:

<!-- wrong --> 
    <resource>  
     <directory>resources</directory> 
    </resource> 

由於<directory>元素的醫生說:「說明所在的目錄資源被存儲相對於POM,路徑是 。「

所以,如果你按照默認的Maven的項目結構,你必須這樣設置:

<!-- correct --> 
    <directory>src/main/resources</directory> 

或不設置它,那麼它回落到相同的Maven的默認值。

相關問題