This question already has an answer here:
Maven Java Version Configuration ignored by Eclipse/Idea
(1个答案)
3年前关闭。
我已经安装了JDK 1.8,并将JAVA_HOME配置为JDK 1.8。我正在使用apache-maven-3.0.5。我创建了一个maven项目并将maven-compiler-plugin(3.3)
问题是,如果我使用任何Java 1.8功能(例如
我观察到的一件事是,如果我将JAVA_HOME指向JDK 1.7目录,那么它将引发编译错误。
但是我的期望是,即使我在pom.xml中将编译器级别设置为1.7时,也有指向JDK 1.8的JAVA_HOME,它也应服从该编译器级别(1.7)并抛出错误。
我想念什么?
PS:从Eclipse IDE运行时,它使用的是正确的JDK(1.7)并显示错误。但是,当我从命令行运行它时,我遇到了这个问题。
(1个答案)
3年前关闭。
我已经安装了JDK 1.8,并将JAVA_HOME配置为JDK 1.8。我正在使用apache-maven-3.0.5。我创建了一个maven项目并将maven-compiler-plugin(3.3)
<source>
和<target>
配置为1.7。问题是,如果我使用任何Java 1.8功能(例如
String.join()
或map.remove(key, value)
),即使将编译器级别设置为1.7,它仍然可以成功编译。我观察到的一件事是,如果我将JAVA_HOME指向JDK 1.7目录,那么它将引发编译错误。
但是我的期望是,即使我在pom.xml中将编译器级别设置为1.7时,也有指向JDK 1.8的JAVA_HOME,它也应服从该编译器级别(1.7)并抛出错误。
我想念什么?
PS:从Eclipse IDE运行时,它使用的是正确的JDK(1.7)并显示错误。但是,当我从命令行运行它时,我遇到了这个问题。
最佳答案
您正在混合两件事:
编译器(例如default
方法,lambdas)
Java库/ API(例如Stream
,Optional
,String.join
)
Maven只能检查编译器级别,除非您希望代码在JDK 1.7上运行,否则您正在使用JDK 1.8中的库进行操作。
而且,即使Java也不总是知道哪些方法/类出现在标准库的较新版本中(并非所有方法/类都标记有@since
标记),因此,如果尝试使用javac
进行编译,则会得到类似的结果。