3

我有多模块项目并使用 maven 的程序集插件来压缩项目的工件。

Proj
 +Module A
   pom.xml
 +Module B
   pom.xml
pom.xml

当我构建主模块时,它将产生以下内容

Proj
 +Module A
   target\A.jar
   target\A-source.jar
   target\A-javadoc.jar
 +Module B
   target\B.jar
   target\B-source.jar
   target\B-javadoc.jar

1)我在 ModuleB pom 文件下添加了程序集插件,我在程序集描述符文件中使用了 ModuleSet

<moduleSets>
    <moduleSet>
       <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>groupA:A:jar</include>
        <include>groupA:A:javadoc</include>
        <include>groupA:A:source</include>  
      </includes>
      <binaries>
        <outputDirectory>moduleA</outputDirectory>
        <unpack>false</unpack>
      </binaries>
    </moduleSet>

    <moduleSet>
    <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>groupB:B:jar</include>
        <include>groupB:B:javadoc</include>
        <include>groupB:B:source</include>
      </includes>
      <binaries>
        <outputDirectory>moduleB</outputDirectory>
        <unpack>false</unpack>
      </binaries>
    </moduleSet>
  </moduleSets>

但我在 zip 文件下只得到 A.jar 和 B.Jar。我没有在 zip 文件中获取 javadoc 和源代码。是从 m2 repo 下载它吗,我怀疑它是否这样做,因为在 maven reporee 工件中不会有源代码和 java doc。如何在 zip 文件中添加所有三个工件?

2)我想在我的父 pom 中而不是在 ModuleB 的 pom 中添加程序集插件,但如果我这样做,我会得到一个异常“请确保在生成程序集之前运行包阶段”。谷歌搜索后,我发现很少有人建议将程序集添加为模块。有没有其他方法来处理这个?

4

1 回答 1

4

我使用dependecySet来解决这个问题,我们可以使用通配符添加所有二进制文件。

<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>bin</id>
  <includeBaseDirectory>false</includeBaseDirectory>
  <formats>
    <format>zip</format>
  </formats>
 <dependencySets>
        <dependencySet>
            <includes>
                <include>groupA:*:*:*</include>
            </includes>
            </dependencySet>
         </dependencySets>
</assembly>

这将添加项目的所有二进制工件。还要注意的另一件事是程序集描述符中使用的 id。它应该是二进制工件的 bin。如果有人遇到类似问题,请在此处发布,这可能会有所帮助。

于 2012-05-22T18:09:06.763 回答