一位同事正在尝试建立一个新的Spring项目。该项目显式地依赖于spring-security,而spring-security又(隐式地)依赖于wss4j。在运行测试时,他遇到了缺少类的问题。
我们已经将缺失的类追踪到了axis-saaj,这是wss4j的一个“提供的”作用域依赖项。当我运行dependency:tree maven目标时,它没有被列为他的项目的依赖项。
我对“provided”的理解是这样的:它是由Maven为构建解析的,但不包含在可交付成果中,也不是由Maven (在类路径上)为任何“运行”阶段提供的(运行测试或通过Maven运行应用程序本身)。
因此,在“provided”依赖项对您的项目是隐含的情况下,Maven将完全忽略它,因为它实际上并不是构建依赖于“provided”工件的可交付成果,而是由您在运行时提供它。
我已经测试并列出了dependency:tree提供的依赖关系,如果它们是项目的显式依赖关系,但如果它们位于依赖关系树的较低位置,则不会。
我已经告诉他现在将依赖项作为显式依赖项(作用域为‘运行时’),但显然这会在完整的运行时环境中造成问题(它的作用域不是无缘无故的‘提供’),但我们需要知道依赖项才能显式地包含它们。有没有人知道如何获取项目的完整依赖列表?
谢谢
PS。我知道我也可以让他显式地依赖于带有“test”作用域的“axis-saaj”,但这不是问题所在,列出依赖项才是问题所在!
PPS。我们使用Maven3来实现这一点
PPPS。我没有在这里包含任何pom文本,因为它会变得太长。您可以通过在(groupId) org.springframework.ws,(artifactId) spring-ws-security,(版本)2.0.0.RELEASE上创建一个显式依赖项来查看这一点。
发布于 2011-08-13 09:00:22
mvn dependency:tree和mvn dependency:list给出了你想要的“完整依赖列表”。正如您似乎正确理解的那样,您的依赖项的给定作用域依赖项不符合“传递性”的条件,因为缺少更好的词,因此不能算作您项目的依赖项。你似乎对情况有一个正确的把握,所以我不确定你还在问什么。试着问一些特定的问题和/或阅读basics of transitive dependencies,特别是页面下方的表格,它表明所提供的依赖关系永远不会包含在可传递性中。
发布于 2011-08-13 08:52:13
您是否检查了此axis-saaj依赖项是否也是optional=true
您所描述的行为正是optional所暗示的,因此您需要添加它是正确的。
https://stackoverflow.com/questions/5389934
复制相似问题