Java 如何从第三方库中剥离绒毛?
这可能不是最佳实践,但有一些方法可以从第三方的jar文件中删除不受支持的类。查看我的类使用库的方式并进行某种覆盖率分析,然后抛出另一个jar,删除所有未触及的类 显然这有问题。具体来说,我提出的使用场景可能不会一直使用所有类Java 如何从第三方库中剥离绒毛?,java,optimization,size,Java,Optimization,Size,这可能不是最佳实践,但有一些方法可以从第三方的jar文件中删除不受支持的类。查看我的类使用库的方式并进行某种覆盖率分析,然后抛出另一个jar,删除所有未触及的类 显然这有问题。具体来说,我提出的使用场景可能不会一直使用所有类 但是忽略这些问题,原则上可以做到吗?jar只是一个zip文件,所以我想你可以。如果你能找到源头,它会更干净。也许可以尝试分解类?再加上这个问题,这能提高性能吗?由于未使用的类不会进行JIT编译以缩短启动时间,或者java会在编译为字节码时自动检测到这一点,甚至不会处理未使用
但是忽略这些问题,原则上可以做到吗?jar只是一个zip文件,所以我想你可以。如果你能找到源头,它会更干净。也许可以尝试分解类?再加上这个问题,这能提高性能吗?由于未使用的类不会进行JIT编译以缩短启动时间,或者java会在编译为字节码时自动检测到这一点,甚至不会处理未使用的代码?在以前的工作中,我使用了一个java模糊器,在模糊代码的同时,还删除了未使用的类和方法。如果您正在执行“Class.byName”或任何其他类型的反射,则需要告诉模糊处理程序,因为它无法通过检查代码来判断反射调用了哪些类或方法
当然,问题是,您不知道第三方库的其他部分是否正在进行任何反射,因此删除“未使用”的类可能会导致在您尚未测试的模糊情况下出现问题。这将是一个有趣的项目(有人已经完成了吗?) 我想你应该把你的jar作为一个起点,把库jar清理一下。它可以使用反射来确定jar直接引用的类,以及调用树中间接使用的类(这一点都不微不足道,但可行)。如果它在这两个地方遇到任何反射代码,它应该发出非常响亮的警告。有一种方法 JarJar项目在AFAIR中实现了这一点。JarJar项目的第一个目标是允许在您自己的jar中嵌入第三方库,必要时更改包结构。这样做可以去掉不需要的类 请点击查看
这里有一个关于缩小JAR的链接:Ant中有一个称为类文件集的工具。指定您知道需要的根类列表,然后类文件集递归地分析它们的代码以查找所有依赖项 或者,您可以开发一个好的测试套件,该套件可以测试您需要的所有功能,然后在测试覆盖率工具下运行测试。该工具将告诉您实际使用了哪些类(以及其中的语句)。这可以为您提供比静态分析更小的代码集。我使用它。它不仅是一个优秀的模糊处理工具,而且还有一个代码收缩阶段,可以组合多个JAR,然后去掉任何未使用的类或类成员。它在收缩方面做得非常好