2013-05-15 61 views
9

我正在使用Maven assembly插件將我的Java項目的二進制文件打包成一個胖jar(帶有jar-with-dependencies描述符)。這工作得很好。Maven:使用jar -with-dependencies分發源代碼

問題:我怎樣才能將我的項目的源文件包括在編譯後的類文件中?我試圖查看Maven文檔以找出如何做,但找不到任何東西。

謝謝!

我的pom.xml看起來是這樣的:

<project> 
... 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <finalName>${pom.artifactId}-${pom.version}</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
        <outputDirectory>${project.basedir}/bin/</outputDirectory> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

回答

6

最簡單的解決方法是使用預定義的描述符src或者它可能是更好的使用預定義的描述符project

<descriptorRefs> 
    <descriptorRef>jar-with-dependencies</descriptorRef> 
    <descriptorRef>src</descriptorRef> 
    </descriptorRefs> 

或其他選項會是這樣的:

<descriptorRefs> 
    <descriptorRef>jar-with-dependencies</descriptorRef> 
    <descriptorRef>project</descriptorRef> 
    </descriptorRefs> 
+0

謝謝!這並不是我想到的,因爲我打算將源碼打包到同一個jar中,但這可能是完全足夠或更好的。 – Johannes

+0

這取決於一點點。我建議只在發佈時使用maven-source-plugin來實現這個目的。這可以通過增強每個SNAPSHOT部署來創建源代碼包。輪到你選擇你喜歡的方式了。 – khmarbaise

3

難道是因爲您選擇將二進制代碼和源代碼作爲胖罐分發的特殊要求?通常,二進制文件和源文件一起發佈,但是作爲單獨的jar文件。 Maven Central上的許多項目都在使用這種方法,Nexus和Artifactory等存儲庫也支持這種方法。如果您選擇此選項,maven-source-plugin是您的朋友。從documentation

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>attach-sources</id> 
     <goals> 
     <goal>jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

然後執行mvn source:jar。請參閱configuration options的網頁。

+0

感謝您的提示!使用hkmarbaise指出的assembly插件的src描述符似乎更簡單一些,因爲它不需要額外的插件。 – Johannes