如何使用Maven的聚集和继承来收集子模块罐子为母公司的压缩包

我有以下结构的多模块Maven项目:如何使用Maven的聚集和继承来收集子模块罐子为母公司的压缩包

root module 

module A

module B

module C

module C-1

module C-2

模块C在这个项目是新的。其目标是为子模块C-1和C-2(即对其为亲本)和集合定义模块C-1和C-2构建成单个焦油球的共享依存关系模块的C target目录。

这个目标是实现:

  • pom.xml列表模块A,B,和C
  • 模块C pom.xml列表模块C-1和C-2,并声明共享依赖性;它还声明包装为“pom”
  • maven-assembly-plugin在模块C中用于查找其子目录target中的所有*.jar文件并将它们打包到tgz中。

我在这个实现中遇到了一些问题。简单的一个是C-1和C-2的自我依赖 - 它们从C继承了它自己的依赖,因此拒绝编译。我在C中使用dependencyManagement来解决这个包装依赖问题。看起来它工作正常。

我也对Assembly插件有问题。当在文件集值中使用通配符时,它会保留结果tar文件夹中的目录结构,看起来你无法做任何事情。因此,具有模块C的bin.xml

<fileSet> 

<directory>${project.basedir}</directory>

<outputDirectory>/</outputDirectory>

<includes>

<include>**/*.jar</include>

</includes>

<excludes>

<exclude>**/*-javadoc.jar</exclude>

</excludes>

</fileSet>

结果按照压缩包了一种具有结构

moduleC-version/moduleC-1/target/moduleC-1-version.jar 

moduleC-version/moduleC-2/target/moduleC-2-version.jar

时,我只需要

moduleC-version/moduleC-1-version.jar 

moduleC-version/moduleC-2-version.jar

欧凯,这不是太重要。主要问题是反应堆建造顺序。无论我做什么它导致

  1. 模块A
  2. 模块B
  3. 模块C
  4. 模块C-1
  5. 模块C-2

这是因为构建失败在模块C上抱怨

创建程序集失败:创建程序集归档bin时出错:您必须至少设置一个文件。 - > [Help 1]

我的理解是,问题出现在反应堆构建顺序 - C-1和C-2应该在C之前构建 - 但我无法得到如何管理它有C父母给他们,并保持在模块结构的顶部。

回答:

如果你需要有一个像包一样的发行包(例如zip),你必须定义一个包含它的配置的独立模块。 此外,您需要将每个您想要打包的模块定义为依赖项,以确保构建顺序由maven正确完成。

你必须使用看起来像this:

<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>dist-assembly</id>

<formats>

<format>zip</format>

</formats>

<includeBaseDirectory>false</includeBaseDirectory>

<dependencySets>

<dependencySet>

<outputDirectory>/</outputDirectory>

<useProjectArtifact>false</useProjectArtifact>

<unpack>false</unpack>

<scope>runtime</scope>

</dependencySet>

</dependencySets>

</assembly>

项目的结构看起来更或类似this:

+- pom.xml 

+-- mod1

+-- mod2

+-- dist

更新的Maven的组装插件描述:

如果您只需要你可以作为组件描述符的模块来代替:

<moduleSets> 

<moduleSet>

<useAllReactorProjects>true</useAllReactorProjects>

<binaries>

<outputDirectory>modules</outputDirectory>

<unpack>false</unpack>

</binaries>

</moduleSet>

</moduleSets>

以上是 如何使用Maven的聚集和继承来收集子模块罐子为母公司的压缩包 的全部内容, 来源链接: utcz.com/qa/259839.html

回到顶部