【问题标题】:Invoking jdk 7 compiled class from jdk6从 jdk6 调用 jdk 7 编译类
【发布时间】:2013-10-01 03:01:17
【问题描述】:

我有使用 jdk7 编译的类,我正在尝试使用 JDK6 调用,并且类路径中的 jar 是使用 jdk 6 编译的

jdk6/bin/java com.test.myclass -classpath abc.jar xyz.jar pqr.jar MNO.jar

我的班级com.test.myclass 存在于MNO.jarabc.jar xyz.jar pqr.jar 中使用jdk6 编译

使用 jdk7 就可以了

jdk7/bin/java com.test.myclass -classpath abc.jar xyz.jar pqr.jar MNO.jar

这也失败了。任何输入来解决这个问题。?

Exception in thread "Main Thread" java.lang.UnsupportedClassVersionError: com/test/MyClass: unsupported classversion 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.test.MyClass.  Program will exit.
256

谢谢

【问题讨论】:

  • 你不能从 jdk 1.6 调用 jdk 1.7 类 ...

标签: java java-7


【解决方案1】:

编译源代码时,提供参数-target 1.6。这样将生成符合 1.6 的字节码(即类文件将表明它们需要 1.6 或更高版本才能运行)。

【讨论】:

  • @constantlearner 所以你的程序根本不起作用?那么你应该在担心 1.6 之前修复它。
  • @constantlearner 你打算告诉 jdk7 的错误信息是什么,还是你认为我们是读心者?来吧,帮助我们帮助你。
  • 我正在调试日志,请给我一些时间会上传错误抱歉给您带来不便
  • @constantlearner 应该不会花很长时间,您应该在最初的帖子中包含这些信息。说“它不起作用”是程序员(或测试人员或客户)能说的最无用的话。
  • 我在客户端这样做需要时间,而且场景很复杂,这里的 jar 是 weblogic 的
【解决方案2】:

作为最后的手段,您可以使用十六进制编辑器将 .class 文件中的类版本从 33 更改为 32(文件开头的第 7 个字节)。如果该类不使用任何 Java 7 新特性,它将正常工作。

【讨论】:

    【解决方案3】:

    如果您在课堂上使用了任何 jdk 7 特定代码,那么它将无法工作,否则它应该可以工作。

    【讨论】:

    • 没有。类文件将被标记为 jdk 7 并且不会在其下运行,除非您在编译时指定 -target。
    • @Kayaman 请再看一遍问题,他要求运行类文件不编译,他已经表示他已经使用 jdk 7 编译了类并想在 jre 6 中调用。
    • 我知道。但是如果在构建过程中不指定目标,它会生成1.7的字节码,在1.6下不会运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2015-04-11
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多