找出实际加载的Java类并减少jar

Han*_*örr 5 java maven

有没有办法自动找出实际加载的Java类(在编译期间,在可能的情况下,或在应用程序的运行时),并从JAR中抛出所有其他类以创建更小的JAR ?这在实践中真的有意义吗?

我在谈论应用程序JAR的应用程序类.通常,应用程序中有许多库,应用程序很少需要这些库的所有功能.所以我怀疑这会使一个相当小的应用程序.从理论上讲,可以通过Java代理来完成,该代理记录一个或多个应用程序运行(或者甚至只是java -verbose:class)读取哪些类和资源,以及抛出所有其他类的maven插件来自jar-with-dependencies.有这样的东西吗?

澄清:我不是在谈论未使用的依赖项(根本没有使用的JAR),而是关于删除每个包含的JAR的未使用部分.

Gok*_* KP 0

这可能不是一种好的自动化方法,因为应用程序可以使用反射来初始化对象,或者一个 JAR 依赖于另一个 JAR。

我能想到的唯一方法是一一删除每个 JAR 并检查应用程序是否按预期运行。然后,在这种方法中,必须测试应用程序的所有模块,因为一个模块可以在没有特定依赖性的情况下工作,而其他模块则可能不能。

更好的解决方案是在开发时小心谨慎。应用程序开发人员在完成他/她的代码后,必须小心添加依赖项并删除不需要的依赖项。