我有一个多模块Maven项目。其中一个模块负责将所有其他模块的输出打包成一个可交付成果。我目前遇到的问题是我的程序集无法从其他模块收集输出,但是没有显示消息:
[WARNING] The following patterns were never triggered in this artifact
inclusion filter:
o '*:a'
我的项目布局的简化版本如下所示,其中moduleA
是一个构建标准jar-with-dependencies输出的项目,moduleB
是我负责打包的模块。根级pom.xml
将moduleA
和moduleB
列为模块。
parent
|- moduleA (foo:a)
|- pom.xml
|-src
|- ...
|- moduleB (foo:b)
|- pom.xml
|- src
|- main
|- assembly
|- assembly.xml
|- pom.xml
我为moduleB
创建了一个目前如下所示的汇编描述符:
<assembly>
<id>dist</id>
<formats>
<format>tar.gz</format>
</formats>
<moduleSets>
<moduleSet>
<includes>
<include>*:a</include>
</includes>
<binaries>
<attachmentClassifier>jar-with-dependencies</attachmentClassifier>
<outputDirectory>package</outputDirectory>
<dependencySets>
<dependencySet>
<excludes>
<exclude>*:*</exclude>
</excludes>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
我还在moduleA
的{{1}}文件(编译范围)中列出了moduleB
作为moduleB
的依赖关系。我这样做是因为我相信它会强制pom.xml
在moduleB
之后建立;它似乎有用。
有人可以建议为什么我的moduleA
程序集没有从moduleB
收集jar-with-dependencies输出并且抱怨模式永远不会被触发?
我已尝试指定moduleA
的groupId(而不是使用通配符),但它没有帮助。我还试图简化moduleA
的汇编描述符,如下所示,结果没有任何变化:
moduleB
新:可以在此处找到此问题的SSCCE:http://dl.dropbox.com/u/108474287/parent.zip
Maven版本:<assembly>
<id>dist</id>
<formats>
<format>tar.gz</format>
</formats>
<moduleSets>
<moduleSet>
<includes>
<include>foo:a</include>
</includes>
<binaries>
<outputDirectory>package</outputDirectory>
<dependencySets></dependencySets>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
答案 0 :(得分:1)
我认为问题在于您有一个多模块项目,并且您试图让<moduleSet/>
引用一个兄弟。从Including Module Binaries您可以找到以下文字:
moduleSet部分中的new(自2.2)useAllReactorProjects标志允许您在多模块构建中使用子模块中的模块二进制文件。这对于解决Maven的构建顺序和模块二进制文件的旧方法之间的冲突很重要,其中程序集是从父POM构建的。
所以我将你的汇编文件更新为(添加<useAllReactorProjects/>
)并使其正常工作:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>dist</id>
<formats>
<format>tar.gz</format>
</formats>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>*:a</include>
</includes>
<binaries>
<outputDirectory>package</outputDirectory>
<dependencySets>
<dependencySet>
<excludes>
<exclude>*:*</exclude>
</excludes>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
NB 我删除了标记<attachmentClassifier>jar-with-dependencies</attachmentClassifier>
,因为它完全错误。
输出是.tar.gz
,我认为这是你想要实现的,尽管jar-with-dependencies
指向另一个方向。我不清楚你想要什么...
maven-assembly-plugin
的替代方法可能是使用maven-shade-plugin
。
答案 1 :(得分:0)
根据Maven文档,给出以下项目结构,以及父POM中的所有适当的模块引用:
+ parent (groupId: org.test, artifactId: parent)
|
+ child1 (groupId: org.test, artifactId: child1)
|
+ child2 (groupId: org.test, artifactId: child2)
我们可以使用以下moduleSet选择child1模块:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
[...]
<moduleSets>
[...]
<moduleSet>
<includes>
<include>org.test:child1</include>
</includes>
</moduleSet>
</moduleSets>
[...]
</assembly>
我从未在include选项中使用过通配符,你能提一下包而不是通配符吗?
答案 2 :(得分:0)
在我的情况下,我错过了将该模块作为POM中的依赖项包含在内,并且仅包含在src.xml中。如果您遇到问题,它只是另一个地方。