一位同事正在尝试建立一个新的Spring项目。该项目明确依赖于spring-security,而spring(安全)又依赖于wss4j。在运行测试时,他遇到了缺少课程的问题。
我们已经将缺少的类跟踪到了ax-saaj,这是wss4j的“提供的”范围依赖。当我运行dependency:tree
maven目标时,它不会被列为项目的依赖项。
我对'提供'的理解是这样的:它由Maven解决了构建,但没有包含在可交付成果中,也没有由Maven(在类路径上)提供任何“运行”阶段(运行测试或运行应用程序本身)通过Maven)。
因此,如果“提供的”依赖项隐含在您的项目中,Maven会完全忽略它,因为它实际上并没有构建依赖于“提供的”工件的可交付物,而是由您来为运行提供它 - 时间。
我已经测试过并且dependency:tree
列表提供了依赖项,如果它们是项目的显式依赖项,但是如果它们在依赖树中较低,则不会。
我告诉他暂时将依赖项包含为显式依赖项(作用域'运行时'),但显然这会在完整的运行时环境中导致问题(它没有“提供”任何内容),但我们需要知道依赖关系以明确包含它们。有没有人知道如何获得项目的完整依赖列表?
由于
PS。我知道我也可以让他明确地依赖'axis-saaj'和'test'的范围,但这不是问题,列出了依赖关系!
PPS。我们正在使用Maven 3
PPPS。我没有在这里包含任何pom文本,因为它会花太长时间。你可以通过创建一个项目显式依赖于(groupId)org.springframework.ws,(artifactId)spring-ws-security,(version)2.0.0.RELEASE来看到这一点。
答案 0 :(得分:2)
您是否检查过此axis-saaj
依赖项是否也是optional=true
?
您描述的行为正是可选的含义,因此您需要添加它是正确的。
答案 1 :(得分:1)
mvn dependency:tree
和mvn dependency:list
提供您正在寻找的“完整依赖列表”。正如您似乎正确理解的那样,依赖项的提供范围依赖项不符合“传递性”的条件,因为缺少更好的单词,因此不会将其视为项目的依赖项。你似乎对这种情况有了正确的把握,所以我不确定你还在问什么。尝试询问一些特定的问题和/或阅读basics of transitive dependencies,特别是在页面下方的表格,这表明提供的依赖性永远不会包含在传递性中。