是否有任何工具列出应用程序有效使用哪些类和哪些类,甚至更好地自动修剪JAR库以仅提供既被引用又被使用的类?如何确定Java程序使用哪些类?
回答
请记住,正如halting problem所证明的那样,您无法明确指出某个特定类是否被使用。至少在任何适度复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:
- 基于XML配置(例如Spring);
- 从属性文件(例如JDBC驱动程序名称)加载;
- 动态添加注释;
- 作为外部输入(例如,用户输入,来自数据库或远程过程调用的数据)的结果加载;
- 等
所以只是看着源代码是不够的。话虽如此,任何合理的IDE将为您提供依赖分析工具。 IntelliJ当然会。
你真正需要的是运行时检测你的应用程序正在做什么,但即使这样也不能保证。毕竟,由于奇怪的输入组合,一个特定的代码路径可能会出现在千万次运行中,因此无法保证您的覆盖范围。
虽然这样的工具确实有一些价值。你可能想看看像Emma。 Profiler如Yourkit可以给你一个代码转储,你也可以进行分析(尽管这样做不会很好地获得瞬态对象)。
就我个人而言,除了IDE会告诉你什么之外,我发现的价值不大:删除未使用的JAR。比这更细化的只是要求一点点到没有收获的麻烦。
你可以尝试JarJar http://code.google.com/p/jarjar/
它修剪JAR依赖。
专门创建一个胖的jar和一个jar只是你的代码。使用'java -jar jarjar.jar找到class code.jar fat.jar',它将列出你的依赖关系。您可以创建一个基于此的“保留”语句的规则文件,然后将您的胖罐加工为最小化的罐子。 – 2015-12-09 17:13:13
是的,你想要ProGuard。它是一个完全免费的Java代码收缩器和混淆器。配置简单,快速而有效。
只要确保提供了正确的“根”类列表,从中可以搜索到引用,并且您不会忘记您通过反射使用的任何类。 – 2009-01-24 10:06:05
对于大多数情况下,只需使用javac即可轻松完成。
删除你现有的类文件。使用入门级的名称调用javac。它会编译这些必要的类,但不会再有。任务完成。
我认为OP意味着图书馆以及你自己的课程 – Chii 2009-01-24 12:34:10
- 1. 如何确定在应用程序中使用哪些JAR
- 2. 确定类中使用哪些类
- 3. 如何确定哪些使用jQuery
- 4. 如何确定哪些代码行参与了Java程序的特定执行?
- 5. 确定程序集引用某些类
- 6. 确定哪些控制我的应用程序使用
- 7. 如何确定哪些类可以序列化
- 8. 如何确定哪些正在运行的应用程序使用.Net
- 9. 确定我的Java程序的哪些部分需要优化
- 10. 如何确定哪些功能正在使用哪个头?
- 11. 确定使用哪个类
- 12. Delphi如何确定哪个程序调用另一个程序?
- 13. 如何确定哪些Visual Studio解决方案使用哪些项目?
- 14. 如何确定Java EE 6应用程序服务器类型?
- 15. 如何确定Java应用程序中的主类?
- 16. 如何确定哪个程序在VB 2005中使用文件?
- 17. 如何在程序级别确定某些java类/接口的存在?
- 18. 确定全局使用哪些变量
- 19. 如何确定哪些appstore用户正在使用?
- 20. 如何知道哪些类正在通过哪些类加载程序在Java中加载?
- 21. ProGuard - 如何正确使用Android?要保留哪些类和库?
- 22. 确定哪些客户端使用Java NIO
- 23. 如何确定使用java哪些网站已在浏览器中打开?
- 24. 不确定在Heroku/rails中包含哪些应用程序
- 25. 如何确定哪些驱动程序可用于PHP(在Linux系统上)odbc?
- 26. 哪些应用程序使用Java进行用户登录?
- 27. 你如何确定哪些库没有被使用
- 28. 如何确定网站后端使用了哪些技术?
- 29. 如何确定哪些容器使用泊坞窗容积?
- 30. 如何确定使用WMI连接哪些打印机
如果我们不动态加载类会怎么样?换句话说,没有XML配置,属性文件,注释,rpc和什么。那么这样的工具可以保证*工作吗? – Pacerier 2014-06-13 11:02:35