Gradle,“源兼容性”与“目标兼容性”?

2022-08-31 06:56:14

和 之间的关系/区别是什么?当它们设置为不同的值时会发生什么情况?sourceCompatibilitytargetCompatibility

根据Gradle文档

sourceCompatibility是“编译 Java 源代码时要使用的 Java 版本兼容性”。 是“要为其生成类的 Java 版本”。targetCompatibility

我的理解是,将生成与特定版本的Java兼容的java字节码,这是功能的子集吗?targetCompatibilitysourceCompatibility


答案 1

targetCompatibility和映射到 javac 和 在 javac 中。源基本上是源语言级别,目标是生成的字节码级别。sourceCompatibility-target release-source release

更多细节可以在javac交叉编译部分找到。


答案 2

使用这些时要小心;我们被做假设的人咬了一口。

仅仅因为您使用了 1.5 的 sourceCompability(或 targetCompatability),并不意味着您始终可以使用 JDK 1.6 编译代码,并期望它在 JDK 1.5 下工作。问题在于可用的库。

如果你的代码碰巧调用了某些仅在 JDK 1.6 中可用的方法,它仍将使用目标 VM 的各种兼容性选项进行编译。但是当你运行它时,它将失败,因为有问题的方法不存在(你会得到一个MethodNotFoundException或ClassNotFoundException)。

出于这个原因,我总是将兼容性设置与我正在构建的实际Java版本进行比较。如果它们不匹配,我将无法完成构建。


推荐