Java 8引入了重要的新语言功能,例如lambda表达式.
语言中的这些更改是否伴随着编译的字节码中的这些重大更改,这些更改会阻止它在不使用某些反向转换器的情况下在Java 7虚拟机上运行?
我有一个现有的Spring boot应用程序,我建立gradle.这些天我一直在使用JDK / JRE 8,现在我正在尝试使用JDK-11
因此,要检查兼容性,我设置JAVA_HOME到JDK-11,但试图编译Java 8模式
我在下面添加了以下块 build.gradle
compileJava {
targetCompatibility = '1.8'
}
Run Code Online (Sandbox Code Playgroud)
然后我JAVA_HOME明确地设置set JAVA_HOME=C:\Users\arun\Desktop\jdk-11.0.1
然后执行 gradlew clean build
但是我因以下例外而停止了
> Configure project :
Build Version = build-182-ga03cf6c
> Task :compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> warning: source release 11 requires target release 11
Run Code Online (Sandbox Code Playgroud)
如何指向我JAVA_HOME来JDK-11,但仍然在执行它Java-8 …
我正在尝试使用JDK 11进行编译,但目标是IntelliJ中的Java 1.8。我已经配置:
我收到一堆编译错误,说内部软件包不存在。--add-exports无效,--target 1.8因此无济于事。
唯一起作用的是将Project SDK设置回Java 1.8(这在尝试与Java 11一起运行时会引起其他问题,但这是另一个问题)。
是否可以在IntelliJ中使用JDK 11进行编译并以Java 1.8为目标?
还有其他一些相关的问题似乎可以解决,但不适用于IntelliJ:
注:请不要不上交叉编译的所有危险评.谢谢.
我有一种情况,我们需要为Java 5 JVM编译Java 6源代码(以确保JAX-WS的使用是正确的).以前我们用ant ant脚本(显然可以)这样做了,但是在迁移到Maven之后我们发现它最终以javac抱怨:
$ javac -source 1.6 -target 1.5
javac: source release 1.6 requires target release 1.6
Run Code Online (Sandbox Code Playgroud)
是否有任何对Linux(Ubuntu的11.10,86),其中使用javac可以做到这一点的Java分配?
编辑:它似乎没有,因为限制在javac是相同的.解决方案(这使得需要消失)是从默认的javac编译器改为maven-compiler-plugin中的eclipse编译器.
编辑:我发现Eclipse编译器为javadoc实用程序不同意的匿名内部类生成字节代码.我正在为此问题准备一份错误报告.