gpt4 book ai didi

java - 从已编译的类中推断出公开可用的 Java 代码的版本

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:19 25 4
gpt4 key购买 nike

我目前正在使用一个旧的 Java SE 项目,它有一些版本的 SLF4J作为依赖项(例如引用 org.slf4j.Logger ),但是相关的类被打包在一个非常奇怪的 JAR 中,简称为 commons.jar,我在互联网上找不到任何匹配的库与此文件匹配的内容; 是否有任何“智能”方法来查找与在该 JAR 文件中找到的已编译 Java 类文件相匹配的代码?该文件本身没有 metadata任何类型——仅编译的*.class 文件:

commons.jar
├── apache
│ ├── commons
│ ├── http
│ ├── log4j
├── slf4j

如上面的结构所示​​,JAR 似乎不“属于”任何常见的分发器;尽管它包含术语 apachecommonslog*slf4j,但它似乎并不来自 Apache Commons或来自 SLF4J。

当前方法

目前,我能想到的最好的办法是下载一堆 SLF4J 版本,解压它们,然后运行,例如cmp来自神秘 JAR 的 org/slf4j/Logger.class 文件和来自每个版本的类似 Logger.class 文件,例如

cmp commons/org/slf4j/Logger.class slf4j-1.7.22/slf4j-api-1.7.22/org/slf4j/Logger.class

但是,这不仅涉及大量工作,而且我相信等效源的编译可能会略有不同,具体取决于相关 JAR 的分发者使用的确切编译器......这意味着它们不会在逐字节的基础上进行比较。我怎样才能以更智能的方式进行这种搜索?

最佳答案

如何反射(reflect)所有公共(public)类和私有(private)类及其成员,将它们放入字符串中,对字符串进行排序并为每个版本生成一个文本文件。

您将找到与库的神秘版本完全匹配的库版本,或者找到一个较小的范围。

关于java - 从已编译的类中推断出公开可用的 Java 代码的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41642442/

25 4 0
文章推荐: Java8 将 [List, String] 转换为 Map