2013-05-15 63 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