1

我正在使用这些模块开发一个多模块 Maven 项目

parent
  |-- restful    // this is a jersey restful service as a WAR
  |-- shared     // some stuff shared by all other modules as a jar
  |-- cl-client  // a commandline client to the restful service, needs assembly

父 pom.xml 使用 dependencyManagement 列出所有模块使用的所有依赖项

cl-client 的 pom 包含程序集插件,配置为在打包阶段执行:

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.4</version>
      <executions>
        <execution>
          <id>distro-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>src/main/assembly/assembly.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
      </executions>
    </plugin>

和 assembly.xml 如下:

<assembly>
  <id>commandlinable</id>
  <formats>
    <format>dir</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>my:cl-client</include>
      </includes>
      <binaries>
        <outputDirectory>${artifactId}</outputDirectory>
        <unpack>true</unpack>
        <dependencySets>
          <dependencySet>
            <outputDirectory>${artifactId}/lib</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>false</unpack>
            <scope>runtime</scope>
          </dependencySet>
        </dependencySets>
      </binaries>
    </moduleSet>
  </moduleSets>
</assembly>

当我运行mvn package时,cl-client 模块组装得很好并确实创建了我希望的目录,但唯一的问题是所有依赖项 jar 都复制到 lib/ 目录中,即使是那些仅由“restful”使用的与球衣相关的 jars 等模块。我试图翻转useProjectArtifact旗帜,但似乎没有任何区别。

所以我只是想知道是否有办法告诉 Maven 程序集只包含 cl-client 模块所需的 jar。我在多模块项目的 Maven 程序集上浏览了相当多的在线资源,但无法得到任何明确的答案。

4

1 回答 1

1

使用该mvn dependency:tree命令了解模块之间存在哪些依赖关系。你可能会发现一个工件对球衣有传递依赖,这就是它被包含在内的原因。

于 2013-04-30T07:56:19.767 回答