当前位置: 首页 > 知识库问答 >
问题:

java编译:源代码、目标和版本支持的版本

尉迟冯浩
2023-03-14

我可能会对遗留项目进行一些交叉编译,并且在最近的JDK中我注意到,对于sourcetargetreleaseJVM参数,我们仅限于一些特定的版本。
如何获得这些参数的支持版本?

共有1个答案

宋建柏
2023-03-14

实际上,支持的值取决于所使用的主要JDK版本。
您可以找到相应主要JDK版本的javac文档的信息(下面引用了这些链接)。

关于这些论点的一些一般性说明:

>

  • Maven配置中的目标版本不应优于所使用的JDK版本。
    旧版本的JDK不能用新版本进行编译,因为它不知道其规范。

    注意:虽然最近的JDK可以接受编译较旧的Java版本作为source,但这并不意味着您可以选择任何受支持的最近版本作为source,并且选择任何已记录为受支持的较旧版本作为target(见下文)。
    实际上,Java版本可能会引入新的功能,这些功能在编译时/运行时不是为了与较旧的Java版本兼容而设计的。
    例如,JDK 11可以编译具有8个source编译器版本的类。如果还选择8作为目标编译器版本,编译就会通过。
    但是如果您改变了主意,并且您想用11作为而8作为目标进行编译,编译就会失败。
    这并不总是在javac文档中显式记录的。

    Java9中存在release参数。

    由于sourcetarget是相同的,因此release参数应该优于sourcetarget。它的指定更短,它确保了更好的交叉编译兼容性,即使你不做交叉编译,它也不会受到伤害。
    更多的解释,请参考这个优秀的答案。

    源/目标/版本支持的版本:

    对于Java 7

    • 支持的:

    1.3、1.4、1.5(也是5)、1.6(也是6)和1.7(也是7)。

    • 支持的目标:

    1.1、1.2、1.3、1.4、1.5(也是5)、1.6(也是6)、1.7(也是7)。

      null

    1.3、1.4、1.5(也是5)、1.6(也是6)、1.7(也是7)和1.8(也是8)。

    • 支持的目标:

    1.1、1.2、1.3、1.4、1.5(也是5)、1.6(也是6)、1.7(也是7)和1.8(也是8)。

      null
    • 支持的目标:

    1.6(也是6)、1.7(也是7)、1.8(也是8)和9。

    • 支持的版本:
      null

    1.6(也是6)、1.7(也是7)、1.8(也是8)、9和10。

    • 支持的目标:

    1.6(也是6)、1.7(也是7)、1.8(也是8)、9和10。

      null

    对于Java 11

    • 支持的源/目标/发布:

    6、7、8、9、10和11。

  •  类似资料:
    • 问题内容: 我想将我的.java(几个)编译成至少与Java 兼容的,较新的(最好是较新的)版本。(我有) 问题答案: 是的,您可以在编译时设置编译器的版本。并将您的Java代码编译为Java的旧版本。 从Oracle文章:http : //docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html 交叉编译示例 在这里,我们使用ja

    • 我在maven-compiler-plugin的pom.xml中有以下配置。 JDK的源版本和目标版本应该是什么?它如何依赖于安装在我的计算机上的jdk版本?他们可能不一样吗?例如,安装的jdk是1.8,在源参数-1.6,目标-1.7中。

    • JUnit 5在运行时需要Java 8(或更高版本)。当然,您仍然可以测试使用以前版本的JDK编译的代码。

    • 我想将我的.java(几个)编译成一个,该至少兼容和更新版本,最好是和更新版本的Java。(我有)

    • 我是科特林的初学者。我在执行以下操作时出现以下异常: 线程“main” java.lang.UnsupportedClassVersionError中的异常:org/jetbrains/kotlin/preloading/Preloader : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Na

    • 问题内容: 如果我有一个已编译的Java类,是否可以仅从类文件中知道其目标版本兼容性是什么?具体来说,我有许多编译成Java 6的类文件,它们在Java 5下运行,并显示“无法识别的版本”错误。我希望能够在不运行JVM的情况下查看类文件并查找其目标版本兼容性。有任何想法吗? 问题答案: 我已经在网上找到了它并且可以使用。 每个“ .class”文件都以以下内容开头: 幻数[4字节] 版本信息[4字