Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从编译类推断公开可用Java代码的版本_Java_Dependencies_Shared Libraries_Versioning_Software Distribution - Fatal编程技术网

从编译类推断公开可用Java代码的版本

从编译类推断公开可用Java代码的版本,java,dependencies,shared-libraries,versioning,software-distribution,Java,Dependencies,Shared Libraries,Versioning,Software Distribution,我目前正在使用一个旧的Java SE项目,该项目已将的某些版本作为依赖项(例如引用),但相关类打包在一个非常奇怪的JAR中,该JAR名为commons.JAR,我在Internet上找不到任何内容与此文件匹配的匹配库是否有任何“智能”方法来查找与此JAR文件中已编译的Java类文件相匹配的代码?文件本身没有任何类型的代码-只有已编译的*。类文件: commons.jar ├── apache │ ├── commons │ ├── http │ ├── log4j ├── slf4

我目前正在使用一个旧的Java SE项目,该项目已将的某些版本作为依赖项(例如引用),但相关类打包在一个非常奇怪的JAR中,该JAR名为
commons.JAR
,我在Internet上找不到任何内容与此文件匹配的匹配库是否有任何“智能”方法来查找与此JAR文件中已编译的Java类文件相匹配的代码?文件本身没有任何类型的代码-只有已编译的
*。类
文件:

commons.jar
├── apache
│   ├── commons 
│   ├── http
│   ├── log4j
├── slf4j
如上面的结构所示,JAR似乎不“属于”任何常见的分发服务器;尽管它包含apache、commons、log*和slf4j等术语,但它似乎不是来自或来自slf4j

当前方法 目前,我能想到的最好办法是下载一堆SLF4J版本,提取它们,然后在神秘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发行商使用的确切编译器。。。这意味着它们在每个字节的基础上是不可比较的。如何以更智能的方式进行此类搜索?

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


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

我将研究以下内容:

  • 字节码Java版本,为您提供了有关库构建时间的线索
  • 反编译所有内容。。。也许你很幸运,找到了一些注释/版本常量,为你提供了进一步的线索

好主意,而且可能可以很好地自动化!这是一个非常酷的想法,我会尝试一下。不幸的是,这可能需要一点时间,我才能得到这个解决方案去。。。