2015-05-12 83 views
-1

我看了一下,找不到任何针对我的问题的答案,所以我正在制作一个新的答案。修复编译版本

所以我目前正在寻找一个解决方案,正式脱离我的控制,但如果有什么我可以尝试去修复它的话会很好。

原因是某些正在加载的类是用户提供的,并且没有用最低兼容版本的java编译正确,所以它会导致不可预知的Java要求。

当然,这只会在必要时完成,但如果它没有加载该Java版本,则尝试修补加盖的java版本,以便它可以尝试它。

基本上我试图纠正(如果可能的话)印在Java字节码所陈述的编译版本,让不兼容的Java版本的错误非常不扔了,甚至当他们通常会,如果代码能够成功地原本编上有问题的较低java版本。

基本上,除了提供的可能会丢失的内置库之外,我不确定编译器在不同版本之间是否有大不相同的字节码。如果是这种情况,那么像这样的东西无论如何都无法工作。

欣赏它,jdphenix,这是我需要知道的。

对不起,我在这里做错了,得到消极的票。

+0

您可以粘贴JVM引发的错误或异常吗?这将有助于进一步推断问题。 –

+0

@Mohan Raj呃,这实际上并不是我的错误,但是我正在进行头脑风暴的错误,我可以尝试通过注入来修复,因为mods提供了我没有直接控制权,所以这更多的是对可能或不可以编译后要更正。 我在说的错误是类似'不支持major.minor版本51.0' –

回答

1

不幸的是,字节码实际上太不同了。在课堂上盖章的版本是必不可少的,如果这不正确,将无法正常工作。不幸的是,这种方式无法修复,所以在这方面你会受到其他人的摆布。

2

不幸的是,Java类文件只能向前兼容。因此,针对较新版本的类文件将无法运行系统的JVM。

主要版本之间存在重大变化。例如,我可以在脑海中想到的是Java 5中的可变参数和泛型。

+0

谢谢,这是我需要知道的。我的问题是否令人反感,还是该网站充斥着拖延下流的人? –

+0

我不相信你的问题是堆栈溢出题外话。不过,我只是一个人的意见。我可以提供的最佳见解是指向帮助中心文章http://stackoverflow.com/help/on-topic的链接 - 您还可以在http://meta.stackoverflow.com/上搜索元页面。看看那里是否有任何东西。 – jdphenix

0

在类加载阶段,JVM进行字节码验证。在类文件中,它将获得关于编译它的Java版本的信息,这有助于JVM找出试图加载并进一步执行的当前Java版本。类文件是向后兼容的,你可以在java 5上编译,并且可以运行在更高版本,反之亦然,因为上述验证。字节代码可以注入到已经存在的类文件中,但是如果没有正确注入,应用程序可能会遭受一些异常的执行。

+0

JVM如何找到从类文件编译的Java版本? –