2016-10-11 68 views
2

在我的Mac上,我试图编译一些我写的Java 8源代码。它在Eclipse中编译得很好,但在Maven中,编译失败。Maven编译我的Java 8源代码失败

我得到的形式的多个错误:

[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /Users/admin/eclipse/workspaces/default/Java8/src/main/java/language/utilities/MapDemo.java:[14,33] lambda expressions are not supported in -source 1.7 
    (use -source 8 or higher to enable lambda expressions) 

运行MVN -v产量:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) 
Maven home: /Users/admin/apache-maven-3.3.9 
Java version: 1.8.0_91, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre 
Default locale: en_IE, platform encoding: UTF-8 
OS name: "mac os x", version: "10.12", arch: "x86_64", family: "mac" 

运行导出命令显示JAVA_HOME变量设置为:

JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home" 

这个'源'属性是什么?如果我的Java版本是Java 8,为什么需要设置它?

+1

消息某处显示在您的劲歌像' 1.7'的sourcetarget版本......做? – khmarbaise

+0

检查[这里](http://stackoverflow.com/questions/16723533/how-do-you-specify-the-java-compiler-version-in-a-pom-xml-file) – Beloo

回答

4

<maven.compiler.source>1.8</maven.compiler.source> 
<maven.compiler.target>1.8</maven.compiler.target> 
properties of your pom

您不应该在settings.xml中设置此项,因为您强制其他人在默认情况下更改其所有其他项目中的settings.xml并使用JDK8!

+0

谢谢。我在我的项目的父POM中设置了它?也许它不能在'settings.xml'中设置?我想全局设置这个属性,因为我将在我的机器上使用Java 8。 – njk2015

+1

settings.xml不是绝对全局的,也许你正在寻找像'MAVEN_OPTS =“这样的环境变量 - Dmaven.compiler.target = 1.8 -Dmaven.compiler.source = 1.8”'在这一点上,Id喜欢裁判http:/ /stackoverflow.com/questions/9736777/how-to-configure-compiler-level-1-6-in-maven-settings-xml –

+1

在这个问题的答案有一个良好的投票评论,以使用父 - pom,而不是在'settings.xml'中。 –

2

你需要配置你的插件maven-compiler-plugin设定要使用

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.8</source> 
     <target>1.8</target> 
    </configuration> 
</plugin> 
+1

该插件默认处于活动状态,除了我设置用户属性外,它与我的答案没有区别。 –

+2

@PeterRader是的,这是两种方式来做同样的事情,如果OP不想污染他的财产,他可以使用这种方法,否则他可以使用你的 –

+1

你怎么看待他试图设置它的全球? –