我有一个麻烦的Maven集会目标。我有一个项目,它有许多依赖项,每个项都可能有自己的传递依赖项。如果我运行mvn依赖:树比我看到所有依赖包括传递都满足。
当我运行程序集目标时,情况并非如此。我想要的是当我添加一个依赖项时,它还包括所有的传递依赖项。在下面的示例中,我希望包含三个依赖项。因此,在构建程序集时,我希望这些依赖项以及这些依赖项的任何传递依赖项。
<assembly>
<baseDirectory>${artifactId}/${artifactId}-${version}</baseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
</fileSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<outputDirectory>/lib
</outputDirectory>
<includes>
<include>com.acme.core:library-1</include>
<include>com.acme.core:library-2</include>
<include>com.acme.core:library-2</include>
</includes>
</dependencySet>
</dependencySets>
但是如果你打开zip文件,你只会发现存在这三个依赖项,这意味着在运行时由于缺少库,应用程序不适合用途。我发现这完全不直观,因为它违背了人们对POM的期望。
是否有人遇到此问题并且有解决方案?
答案 0 :(得分:14)
“包含”和“排除”也适用于传递依赖。尝试将以下配置添加到dependencySet
:
<useTransitiveFiltering>true</useTransitiveFiltering>
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#dependencySet