运行我们的Maven构建时,我的团队成员在执行时会收到this错误。但是,当我们从命令行运行java -version
时,它表示Java 1.6.0_26。显然,Maven正在使用Java 5,这个错误似乎在尖叫。
如何找出并更改Maven正在使用的Java版本?
3个可能重要的注意事项:
答案 0 :(得分:83)
mvn -version
将输出它正在使用的java。如果将JAVA_HOME设置为有效的JDK目录并且Maven正在使用其他内容,则很可能有人篡改了Maven启动的方式。
答案 1 :(得分:7)
您需要配置maven-compiler-plugin
以使用1.6 source
和target
参数(默认情况下为1.5)。
这是在<pluginManagment>
部分中项目的父pom中最好的(但是你总是可以按个别项目配置它)。
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
答案 2 :(得分:1)
答案 3 :(得分:1)
a <- 10
f <- function(){
a <<- 3
function() {
a <<- 15
a <- 5
return(a)
}
}
g <- f()
g()
a
告诉你Maven正在使用什么编译器,所以这回答了问题,除非你的POM指定了要使用的版本的覆盖值。
以下是在mvn -version
中指定替代的最简单方法:
pom.xml
或者,可以更明确地指定maven-compiler-plugin
。在这种情况下,请查看与插件相关联的<properties>
<maven.compiler.target>1.9</maven.compiler.target>
<maven.compiler.source>1.9</maven.compiler.source>
</properties>
和<source>
值。
这两个选项都描述为here。
如果你的POM有<target>
,那么你也需要检查它(递归)。
注意:指定<parent>
和source
时,这些值将作为命令行选项传递给编译器。使用此功能,您可以编译或运行早于Java版本而不是编译器的标称值。