组件的Maven组装

问题描述:

我有一个多模块maven 2项目,它使用程序集(通过包装阶段的maven-assembly-plugin)以某种方式打包每个模块。然后,我尝试使用另一个模块将这些程序集合并成一个可分发的“安装程序”包。对于安装程序模块,我可以看到来自其他项目的默认jar,但我没有做任何事情似乎让我可以访问额外的程序集。从文档看来,这应该是可能的,所以我认为我要么做错了什么,要么是Maven中的错误?我一直坚持这几天,所以任何帮助将不胜感激!组件的Maven组装

继续从评论我已经在github上创建了一个测试项目来演示这个,proj1模块创建了2个jar文件。我期望在“包”模块中生成的程序集将它们都包含在内,但它不包括主项目jar。

https://github.com/unluckypixie/maven-packaging-test

请注意:我知道坛子里的proj1一个内容是在这个例子中是相同的 - 但他们不是在我的现实生活中的情况,我觉得没有什么是在proj1文件与问题有关。

如果你运行:

mvn clean package 

,做ls proj1/target/*.jar你应该看到:

proj1/target/proj1-1.0-SNAPSHOT.jar 
proj1/target/proj1-1.0-SNAPSHOT-proj1-assembly.jar 

如果在jar包看:

jar -tvf package/target/package-1.0-SNAPSHOT-package-assembly.jar 

你会看到类似这样的:

 0 Mon Jul 30 16:27:00 BST 2012 META-INF/ 
    106 Mon Jul 30 16:26:58 BST 2012 META-INF/MANIFEST.MF 
    0 Mon Jul 30 16:21:46 BST 2012 package/ 
    2358 Mon Jul 30 16:21:44 BST 2012 package/proj1-1.0-SNAPSHOT.jar 
    2363 Mon Jul 30 16:21:46 BST 2012 package/package-1.0-SNAPSHOT.jar 

我想知道为什么proj1/target/proj1-1.0-SNAPSHOT-proj1-assembly.jar不在那里。

的包装装置是这样的:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 

    <id>package-assembly</id> 

    <formats> 
     <format>jar</format> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> 

    <moduleSets> 
     <moduleSet> 
      <useAllReactorProjects>true</useAllReactorProjects> 

      <includes> 
       <include>org.test.parent:*</include> 
      </includes> 

      <binaries> 
       <outputDirectory>/package/</outputDirectory> 
       <unpack>false</unpack> 
      </binaries> 
     </moduleSet> 
    </moduleSets> 
</assembly> 

我已经设法通过我的汇编文件中使用attachmentClassifier得到这个工作,e.g:

<moduleSet> 
     <useAllReactorProjects>true</useAllReactorProjects> 

     <includes> 
      <include>org.me:*</include> 
     </includes> 

     <binaries> 
      <outputDirectory>/output/dir</outputDirectory> 
      <unpack>false</unpack> 
      <includeDependencies>false</includeDependencies> 
      <attachmentClassifier>my-assembly</attachmentClassifier> 
     </binaries> 
    </moduleSet> 

感谢khmarbaise您的帮助,我可能还没有使用你的解决方案,但它帮助我那里!

我已经创建了你的帖子一example project based(做了一些修正它),如果我做了

mvn clean package 

,我发现下包/ target/package-1.0.0-SNAPSHOT-package-assembly.zip其中包含

package/ 
package/proje1-1.0.0-SNAPSHOT.jar 
package/package-1.0.0-SNAPSHOT.jar 

它看起来不错我。问题是你期望的是什么?

+0

如果你看看你的proj1目标文件夹,应该有两个输出罐,一个是你得到的,另一个是程序集名称作为后缀,例如, “proje1-1.0.0-SNAPSHOT-proj1-assembly.jar”那是我之后的那个。所以我总结一下,在输出文件中应该有3个罐子,两个叫做proj1 *,另一个叫做package *。 – 2012-07-30 15:08:22

+0

下面你的例子我已经创建了一个测试项目在git集线器...我没有发布在*之前,所以我没有想到这一点。 – 2012-07-30 15:37:31

+0

增加了pull请求来解决您的问题。 – khmarbaise 2012-07-30 17:00:23