javac:目标版本7与默认源版本1.8冲突。

9

我正在使用javac,但无法将简单的java类编译成1.7版本。

C:\Tests>javac -target 7 GreetingsUniverse.java -nowarn
javac: target release 7 conflicts with default source release 1.8

C:\Tests>javac -version
javac 1.8.0_73

可能的原因是什么?
2个回答

19

添加与目标匹配的源代码,我相信是1.7版本。这应该可以解决问题。

否则,您将把所有这些酷炫的1.8闭包编译到一个1.7的JAR文件中,并在1.7的JVM上运行,这样是行不通的。


7
javac -target 1.7 -source 1.7 newq.java 运行成功,但发出了一个警告。 - Nappa
但是为什么我们称JAVA为一次编写,到处运行,如果我们不能在Java 7机器上运行用Java 8编写的代码呢? - mnagdev
Write Once Run Anywhere的意思是你不需要为不同的硬件(pc/mac/linux/...)编写不同的代码,但这并不意味着你不需要正确的JVM,正确的JVM就像是一个垫片,允许你在不重写代码的情况下移动它。不能使用旧的JVM的原因是每个新版本都会添加功能--你不能使用那些功能,然后期望旧的JVM能够工作--如果一切都在7中工作,他们就不会费心制作Java 8--他们几乎只升级Java #以进行破坏性更改。 - Bill K

1
这意味着,来自JDK版本为1.njavac程序可以在来自版本1.n或更高版本的java程序上运行。
你正在使用来自JDK版本1.8.0_73javac,这意味着编译后的字节码只能由JRE版本1.8或更高版本执行。

如果没有-target参数,这就说得通了;假设javac无法为早期版本生成字节码,那么它为什么会有这样的参数呢? - Haroldo_OK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接