我有一个包含两个直接依赖项的装配项目,一个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复制到文件夹然后使用程序集描述符复制平面文件来解决这个问题。但是,我真的觉得我应该能够使用依赖集来执行此操作。有什么想法吗?
其他信息:
答案 0 :(得分:1)
它是否正在复制WAR的传递依赖?
尝试使用
<useTransitiveDependencies>false</useTransitiveDependencies>
或
<useTransitiveFiltering>true</useTransitiveFiltering>
在WAR的dependencySet中。
Assembly Descriptor documentation
如果关闭useTransitiveDependencies
(默认情况下它处于启用状态),则不应复制WAR的传递依赖关系。
如果useTransitiveFiltering
处于打开状态(默认情况下处于关闭状态),则您定义的过滤器将应用于WAR的传递依赖关系,因为这包括*:war
不应包含任何复制时的依赖JAR。
答案 1 :(得分:0)
另一种可能性是语法*:war
不正确。
您可以尝试在<include>
中明确指定groupId:artifactId,就像您对jar
工件一样吗?
<includes>
<include>mygroup:my-war-artifact</include>
</includes>
答案 2 :(得分:0)
我明白了。我打算查看程序集插件的源代码来找出问题所在。在这样做时,我注意到我正在使用程序集2.2-beta-1。升级到2.2完全解决了这个问题。经验教训我下次应该经常检查插件的版本。