我有一个具有两个直接依赖项的汇编项目,一个war和一个jar。在程序集描述符中,我试图将war放在一个文件夹中,而jar放在另一个文件夹中。因此,我使用以下dependencySet代码片段:
<dependencySets>
<dependencySet>
<outputDirectory>webapps</outputDirectory>
<includes>
<include>*:war</include>
</includes>
<directoryMode>750</directoryMode>
<fileMode>660</fileMode>
</dependencySet>
<dependencySet>
<outputDirectory>bin</outputDirectory>
<includes>
<include>mygroup:my-jar-artifact</include>
</includes>
<directoryMode>750</directoryMode>
<fileMode>660</fileMode>
</dependencySet>
</dependencySets>
然而,当我执行"mvn assembly:single"时,它总是最终将jar放在webapps目录中。我已经尝试了所有可能的方法来强制它排除jar(包括添加排除标签等)。我知道我可以通过使用maven依赖项插件将jar复制到一个文件夹,然后使用程序集描述符将平面文件复制过来来解决这个问题。然而,我真的觉得我应该能够使用依赖集来做到这一点。什么好主意吗?
附加信息:
- 我正在使用maven 3.0.2,但maven 3.0.3显示相同的行为。 我对jar的pom依赖使用了一个"jar-with-dependencies"分类器。
可能是它复制了WAR的传递依赖关系吗?
尝试使用
<useTransitiveDependencies>false</useTransitiveDependencies>
或
<useTransitiveFiltering>true</useTransitiveFiltering>
在WAR的dependencySet .
程序集描述符文档
如果useTransitiveDependencies
被关闭(默认是打开的),WAR的传递依赖不应该被复制。
如果useTransitiveFiltering
是打开的(默认是关闭的),您定义的过滤器将应用于WAR的传递依赖项,并且由于这包括*:war
,因此在复制时不应该包括任何依赖jar。
另一种可能是语法*:war
不正确。
您是否可以尝试在<include>
中显式指定groupId:artifactId,就像您为jar
工件所做的那样?
<includes>
<include>mygroup:my-war-artifact</include>
</includes>
我明白了。我打算看看源代码的汇编插件,以找出问题。在这样做时,我注意到我使用的是汇编2.2-beta-1。升级到2.2完全修复了这个问题。学到的教训是,下次我应该总是检查插件的版本。