我有一个具有以下结构的多模块maven项目:
root module
module A
module B
module C
module C-1
module C-2
模块C是此项目的新功能。其目标是为子模块C-1和C-2(即父)和聚合 jars定义模块C-1的共享依赖关系和C-2在模块的C target
目录中构建为单个tar球。
这个目标是通过以下方式实现的:
pom.xml
列出模块A,B和C pom.xml
列出模块C-1和C-2并声明共享依赖项;它还宣称包装为“pom”maven-assembly-plugin
查找其子项*.jar
目录中的所有target
个文件,并将其打包为tgz。我对这个实现有几个问题。简单的一个是C-1和C-2的自我依赖 - 它们从C继承了对它自己的依赖,因此拒绝编译。我解决了将依赖关系包装到C中的dependencyManagement
中所以看起来它正在工作。
我还有装配插件的问题。在文件集值中使用wildchars时,它会在结果tar球中保留目录结构,看起来你无法对它做任何事情。因此,在模块C的bin.xml
中进行跟踪
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.jar</include>
</includes>
<excludes>
<exclude>**/*-javadoc.jar</exclude>
</excludes>
</fileSet>
导致 tarball 具有结构
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
哦,这不太重要。主要问题是Reactor Build Order。无论我做什么,都会导致
自从模块C抱怨后,这是一个失败
创建程序集失败:创建程序集归档文件箱时出错:您必须至少设置一个文件。 - &GT; [帮助1]
我的理解是问题是按照Reactor构建顺序的顺序 - C-1和C-2应该在C之前构建 - 但是我不知道如何管理它让C成为父母并保持它们在模块结构之上。
答案 0 :(得分:1)
如果您需要像包这样的分发(例如zip),您必须定义一个包含其配置的单独模块。 此外,您需要将要打包的每个模块定义为依赖项,以确保构建顺序由maven正确完成。
您必须使用的maven-assembly-plugin描述符类似于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
更新
如果您只需要模块,则可以将其作为汇编描述符:
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<binaries>
<outputDirectory>modules</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>