我目前正在使用一个旧的JavaSE项目,它有一些SLF4J版本作为依赖项(例如参考org.slf4j. Logger),但是相关的类被打包在一个非常奇怪的JAR中,简称为commons.jar
,我在互联网上找不到任何匹配的库,它们的内容与这个文件相匹配;有没有任何“智能”的方法来查找与这个JAR文件中找到的编译Java类文件相匹配的代码?文件本身没有任何类型的元数据——只有编译过的*. class
文件:
commons.jar
├── apache
│ ├── commons
│ ├── http
│ ├── log4j
├── slf4j
如上面的结构所示,JAR似乎不“属于”任何常见的分发商;尽管它包含术语apache、公共资源、log*和slf4j,但它似乎不是来自Apache公共资源或SLF4J。
目前,我能想到的最好的就是下载一堆SLF4J版本,提取它们,然后在org/slf4j/
Logger上运行例如
.class神秘JAR的文件和每个版本中的类似Logger.class
文件,例如
cmp commons/org/slf4j/Logger.class slf4j-1.7.22/slf4j-api-1.7.22/org/slf4j/Logger.class
然而,这不仅涉及大量工作,而且我相信等效源代码的编译可能会略有不同,这取决于所讨论的JAR发行商所使用的确切编译器……这意味着它们在每个字节的基础上无法进行比较。我该如何以更智能的方式进行这种搜索?
我会研究以下内容:
如何反映所有公共和私有类及其成员,将它们放入字符串中,对字符串进行排序并为每个版本生成一个文本文件。
您将找到与神秘版本库相匹配的库的一个版本,或者找到一个较小的范围。
我们目前在Java8中编译了代码,但我们在Java11 VM上运行它。现在我们也在尝试将代码移动到Java11编译时。想知道在Java8中编译代码与在Java11中编译代码在性能方面是否有任何好处,因为两个编译器都会生成不同的类文件(字节码)?在效率方面,一个与另一个有何不同?
我可能会对遗留项目进行一些交叉编译,并且在最近的JDK中我注意到,对于、和JVM参数,我们仅限于一些特定的版本。 如何获得这些参数的支持版本?
问题内容: 有没有办法编译本机C或C ++代码并将其公开给Linux上的Swift?我可以看到像libdispatch这样的几个Apple库都是用纯C语言编写的,您只需导入即可在Swift中访问它们。 举个例子,假设我有两个文件,并且定义了名为的结构。有没有一种方法可以通过编写import语句来编译它们并在Swift中使用它们? 我试着写文件里面目录下,并且文件位于: 和运行。此产量错误: 我正在
问题内容: 谁能解释相同的Java源代码最终如何编译成 二进制 不同的类文件? 问题来自以下情况: 我们有一个相当大的应用程序(800多个类),该应用程序已经分支,重组并重新集成到主干中。在重新集成之前,我们将主干合并到分支中,这是标准过程。 最终结果是一组包含分支源的目录和一组包含中继源的目录。使用“超越比较”,我们能够确定两组来源相同。但是,在编译时(使用IntelliJ v11中托管的mav
PHP代码的编译 PHP是解析型高级语言,事实上从Zend内核的角度来看PHP就是一个普通的C程序,它有main函数,我们写的PHP代码是这个程序的输入,然后经过内核的处理输出结果,内核将PHP代码"翻译"为C程序可识别的过程就是PHP的编译。 那么这个"翻译"过程具体都有哪些操作呢? C程序在编译时将一行行代码编译为机器码,每一个操作都认为是一条机器指令,这些指令写入到编译后的二进制程序中,执行
问题内容: 命令可以运行已编译的Scala代码吗?如果是这样,我们为什么要使用排他命令? 问题答案: 如果您在类路径中包含了Scala的所有必要运行时库(scala-library.jar,scala-swing.jar …),则可以运行Scala生成的字节代码。scala命令自动执行此操作,并支持特定于Scala的命令行参数。