回答
您需要Class Dependency Analyzer工具。引用简介:
此工具的目的是分析Java™类文件,以便了解有关这些类之间的依赖关系的更多信息。
确实,它不会捕获运行时依赖关系 - 但是缺少运行详尽的100%覆盖测试套件,您永远无法确定是否捕获了所有运行时依赖关系。
如果你希望你应该使用CDA作为第一通运行时依赖,然后做最终应用的详尽的测试,以确保有哪些是只能通过运行时依赖引用没有jar文件。
我可能会错过一些东西,但我不明白这会给你一个无用的jar列表。 – 2009-11-19 14:42:47
它会告诉你应用程序依赖哪些容器,其余的则是无用的。 – sanity 2009-11-19 14:48:45
正确 - 您可以将使用的jar与类路径进行比较,但这是有风险的 - 在分析路径时可能没有使用过库,但是必须使用此库。 – 2009-11-19 14:49:12
我猜“删除它们逐一检查应用程序仍然编译和作品”没有预期的答案:)
(编辑:虽然这种方法上面建议可有点自动化,它仍然不知何故不好受,并必须有一个选择,至少在编译时依赖一些google搜索后,我发现Jar Analyzer这似乎在这个blog post解释是这项工作一个很好的工具。
罐分析器扫描编译依赖关系,这意味着它可以创建一个需要JAR文件的树来编译编译这些JAR文件所需的JAR文件,等等。你会得到一个非常好的报告/图表,显示所有的JAR文件以及它们为什么在那里。
你也可以看到没有任何连接到你的代码的JAR文件,删除它们和他们的孩子。我在libs文件夹中发现的是,在编译时我们的libs文件夹中的大约20%的JAR文件未被使用,并且这些是可能的JAR被删除。
最大的缺点是,您没有得到任何关于哪些JAR文件仅在运行时通过发现和反射来使用的暗示。这就是真正的工作开始的地方。
找出在运行时是否使用JAR文件的唯一方法是基本上把它拿出来,启动你的应用程序并测试每个功能。如果您的应用程序规模适中,则执行100%回归测试需要几个小时。所以在实践中,我最终做了大量的猜测,快速和肮脏的测试,并且询问了解哪些运行时依赖关系实际上正在使用中。
它看起来很容易使用:下载,解压缩并在包含所有罐子的目录上运行该工具。或使用提供的Ant任务。)
Eclipse的最新版本将警告你在你的源代码
如果你确实是在java源代码文件中的import语句 - eclipse的警告很旧,而且是相反的 - 他正在寻找classpath条目没有使用。 – 2009-11-19 14:59:45
这已经是Eclipse功能相当长的时间 – 2009-11-19 14:59:59
编译器有一个-verbose
选项未使用的进口,这是相当冗长。它通知每个被加载的类以及它从哪里加载!
虽然它不太方便用户,并且不提供高级分析,但我发现它对于调试类路径冲突非常有用。这会告诉你使用的罐子(在grep
的帮助下),而不是那些没有使用的罐子。
- 1. 在Java编译/构建项目时将jar复制到输出文件夹
- 2. 如何在使用mvn命令编译项目时添加jar文件
- 3. Eclipse - 如何找出你的项目实际使用哪些库
- 4. 如何在Linux终端中用外部jar文件编译java项目
- 5. 如何导出使用Gson jar的项目的jar文件
- 6. 如何使用批处理文件编译java文件时包含jar文件
- 7. 仅在Gradle项目中编译时风暴JAR编译时间
- 8. 编译java项目时出错
- 9. 编译Eclipse java applet和android项目时使用哪些文件?
- 10. 如何编译黄瓜JVM项目为.jar文件(S)
- 11. 如何用jar文件编译java文件
- 12. 如何找出Java VM实际加载的信任库文件?
- 13. 如何在您的项目中实现预编译头文件
- 14. Gradle在jar文件中编译.java?
- 15. 我如何使Eclipse识别Java编译器(1.6)和项目构面(1.6),实际上在GAE项目中匹配?
- 16. 如何在使用子文件夹的Eclipse中编译项目?
- 17. 如何从Codenvy上的java项目导出JAR文件?
- 18. 编译项目时出错
- 19. 在Kotlin + Java项目中的Eclipse中编译时出错,但项目使用Maven编译
- 20. 如何在eclipse/java/android中使用false @Override编译java项目?
- 21. 如何使用Ant编译和jar一个Android项目?
- 22. 构建Java Derby项目的jar文件时出错
- 23. 使用.java文件编译文件夹和Jar它
- 24. 编译代码时,JAVA无法在NetBeans项目和JAR文件上使用相同的资源
- 25. 如何配置Android Studio项目以使用实际源而不是反编译?
- 26. 如何在Android NDK项目中使用预编译头文件?
- 27. 如何在Qt项目中使用预编译头文件
- 28. 如何编译在BlueJ中使用.jar文件类的代码?
- 29. 即使添加了jar文件后,仍无法编译java项目?
- 30. 如何将Java项目导出为jar文件
你会发现没有人也涵盖了运行时依赖关系。 – BalusC 2009-11-19 14:54:28
您甚至不会为其他依赖项找到一个简单的依赖项。欢迎来到classpath地狱;) – 2009-11-19 15:03:55
记录:类依赖关系分析仪提供最详细的输出,一个很好的图形用户界面来检查结果。然而,它很慢,记忆力很差。作为构建作业的一部分,Jar分析器看起来更容易自动化,并生成大量有用的输出。它也相当快。 – tomdee 2009-11-19 17:14:22