如何确定Java程序使用哪些类?
是否有任何工具可以列出应用程序有效使用哪些类以及何时使用某些类,或者更好的是,自动修剪JAR库以仅提供引用和使用的类?请记住,正如所证明的,您不能肯定地说某个特定类正在使用或没有使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载:如何确定Java程序使用哪些类?,java,optimization,jar,dependencies,Java,Optimization,Jar,Dependencies,是否有任何工具可以列出应用程序有效使用哪些类以及何时使用某些类,或者更好的是,自动修剪JAR库以仅提供引用和使用的类?请记住,正如所证明的,您不能肯定地说某个特定类正在使用或没有使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载: 基于XML配置(如Spring) 从属性文件加载(例如JDBC驱动程序名称) 动态添加注释 作为外部输入的结果加载(例如用户输入、来自数据库或远程过程调用的数据) 等等 所以仅仅看源代码是不够的。也就是说,任何合理的IDE都将为您提供依
- 基于XML配置(如Spring)李>
- 从属性文件加载(例如JDBC驱动程序名称)李>
- 动态添加注释李>
- 作为外部输入的结果加载(例如用户输入、来自数据库或远程过程调用的数据)李>
- 等等
它会修剪jar依赖项。是的,您需要。它是一个完全免费的Java代码收缩器和模糊器。它易于配置,快速有效。在大多数情况下,只需使用javac就可以轻松地完成
删除现有的类文件。使用入口类的名称调用javac。它将编译那些必要的类,但仅此而已。工作完成。只需确保提供正确的“根”类列表,从中搜索引用,并且不要忘记通过反射使用的任何类。我认为OP指的是库以及您自己的类。如果我们不动态加载类,该怎么办?换句话说,没有XML配置、属性文件、注释、rpc等等。那么,这样的工具能保证工作吗?停止的问题只排除了对“非平凡”属性的保证正确的是/否答案。我们可以通过允许错误答案(误报/否定)来避免HP;或者允许一个额外的“未知”答案;或者让它变得“琐碎”(例如,某些关键字是否出现在程序中的任何地方),专门创建一个胖罐子和一个只包含代码的罐子。使用“java-jar.jar find class code.jar fat.jar”,它将列出您的依赖项。您可以基于此创建一个包含“keep”语句的规则文件,然后将fat jar处理到最小化的jar中。