我有一个项目,我正在使用sl4j和log4j。我最近为我的项目添加了一些新的依赖项,我添加的其中一个新依赖项包括对logback-classic的传递依赖,其中包括sj4j的另一个绑定。
我想摆脱logback,但我不知道哪些直接依赖项添加了传递依赖项,以便我可以将其排除。
在maven中,我知道如何获取整个依赖关系图以确定哪个是传递依赖的来源,但我不清楚如何使用gradle执行此操作。
有没有人知道如何使用gradle获取传递依赖的源依赖?
答案 0 :(得分:48)
要显示每个类路径的整个依赖关系树,请使用gradle dependencies
。如果您只对特定的类路径感兴趣,请使用(例如)gradle dependencies --configuration compile
。使用-p
选项在子项目上运行。
要显示谁将特定依赖关系引入特定类路径,以及如何解决任何版本冲突,请使用(例如)gradle dependencyInsight --dependency logback --configuration compile
。
请注意,您还可以从整个类路径(或多个)中排除依赖项。通常这比排除特定的传递依赖更可靠。例如:
configurations.all*.exclude module: "logback-classic"
答案 1 :(得分:0)
更新的答案:
我用这段代码解决了 logback 和 log4j 之间的依赖问题:
queue q = [ from ]
visited = set<node>
back = map<node, list<node>>
while q.not_empty():
now = q.front()
if (now == target):
continue
foreach adjacent_node to now in the graph:
if (adjacent_node in visited):
back[adjacent_node].push(now)
else:
visited.add(adjacent_node)
back[adjacent_node] = [ now ]
q.push(adjacent_node)
# Now collect all shortest paths
ret = []
current = []
def collect(x):
current.push(x)
if (x == from):
ret.push(current.reversed())
return
foreach v in back[x]:
collect(v)
current.pop()
这个解决方案找到了对 log4j-slf4j-impl 的任何依赖,并指示它从 logback 中选择一个(这是一个 spring 应用程序)。这个解决方案出奇地难以追踪,但在许多情况下可能非常有用。
这是关于 handling conflicting candidates 的 gradle 文档。