如何找到特定类文件中的依赖项?

问题描述 投票:6回答:2

我的项目包含一些依赖性,这些依赖性正在拉动相同的共同依赖性。

常见的依赖关系storm-kafka有一个新版本1.0.2和一个旧版本0.10.0

在构建一个带阴影的jar时,我会看到我的胖罐中的两个版本的类以及在执行过程中的某种程度,较旧的版本会被拾取并提供ClassNotFoundError,因为与旧版本相关的其他依赖项不存在。

jar -xvf my_shaded_fat_jar.jar
find . -name KeyValueSchemeAsMultiScheme.class
./org/apache/storm/kafka/KeyValueSchemeAsMultiScheme.class
./storm/kafka/KeyValueSchemeAsMultiScheme.class

storm/kafka比较老,org/apache/storm/kafka是我想要的新品。

令人惊讶的是,我在~/.m2回购中看不到0.10.0:

ls ~/.m2/repository/org/apache/storm/storm-kafka/
1.0.2
# no 0.10.0 here !

如何调试maven以找出较旧的依赖关系从何处蔓延?

编辑:

在运行mvn dependency:tree -Dverbose -Dincludes=storm.kafka时,我得到:

[WARNING] The POM for org.apache.storm:flux-core:jar:1.0.2 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.apache.storm:storm-kafka:jar:1.0.2 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli)  ---
[WARNING] Failed to build parent project for org.apache.storm:flux-core:jar:1.0.2
[WARNING] Invalid POM for org.apache.storm:flux-core:jar:1.0.2, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] Invalid POM for org.apache.storm:storm-kafka:jar:1.0.2, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] Failed to build parent project for org.apache.storm:flux-core:jar:1.0.2
[WARNING] Invalid POM for org.apache.storm:flux-core:jar:1.0.2, transitive dependencies (if any) will not be available, enable debug logging for more details

为什么poms无效?我只是通过删除.m2中的所有东西来清理我的~/.m2/repository/org/apache/storm回购

maven apache-storm
2个回答
0
投票

您可以使用Maven树目标显示所有使用的依赖项。这默认打印出完整的dep树,但你也可以找到它感兴趣的特定依赖 - 例如try:

mvn依赖:tree -Dverbose -Dincludes = storm.kafka

看看卡夫卡的情况如何。更多信息可以在这里找到:

http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html


0
投票
mvn dependency:build-classpath -Dmdep.outputFile=f

给出所有从属罐子的清单。

现在迭代它们并将它们的内容添加到文件中:

for f in `cat f | tr ';' ' '`
do
    echo $f >> out
    unzip -v $f >> out
done
© www.soinside.com 2019 - 2024. All rights reserved.