2014-06-20 160 views
4

我每次尝试使用它时都必须是反Maven我花了很多时间挣扎然后放弃。我的最新版本是尽管拥有1.7 JDK,但仍无法编译Java 7源代码。Maven不会用1.7 JDK编译Java 7

这里是mvn compile的输出。有趣的是,我是使用Maven 3.0.4时,错误消息说-source 1.5而不是-source 1.6与Maven 3.2.1

[ERROR] .../src/main/java/pox/common/ServiceResponse.java:[300,43] diamond operator is not supported in -source 1.6 
[ERROR] (use -source 7 or higher to enable diamond operator) 
[ERROR] .../src/main/java/pox/common/ServiceRequest.java:[185,43] diamond operator is not supported in -source 1.6 
[ERROR] (use -source 7 or higher to enable diamond operator) 

正如你可以看到我使用的是最新的Maven和Maven的版本使用Java 1.7。

$ mvn -v 
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T12:37:52-05:00) 
Maven home: /usr/local/maven 
Java version: 1.7.0_40, vendor: Oracle Corporation 
Java home: /usr/local/jdk1.7.0_40-x64/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux", version: "2.6.18-371.4.1.el5", arch: "amd64", family: "unix" 

我觉得mvn脚本添加/jre,因为我的环境变量不指定。

$ echo -e "$JAVA_HOME\n$M2_HOME" 
/usr/local/java7-x64 
/usr/local/maven 

$ which javac 
/usr/local/java7-x64/bin/javac 

我写了一些POJO的,我想 Springify所以我决定使用Maven,发现这个入门使用Maven的春季现场。

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started

我复制从该网站pom.xml和源成只包含Java源代码,并试图编译我的STS/Eclipse项目。 STS在编译src/main/java中的任何源代码时都没有问题。我可以删除依赖于Java 1.7的代码,并让Maven编译。

到目前为止,我发现的每件事都意味着我没有正确设置我的JAVA_HOME,但我指向的是1.7 JDK。

+0

提供POM。你几乎肯定不会在那里设置版本。 – chrylis

回答

11

嗯,我有一个类似的问题,我有一个项目与Maven和日食,但有问题编译,因为Maven的默认级别的源代码是Java 1.5,当然我的代码是在Java 1.6中,所以我不得不添加编译插件的maven来设置我的源代码版本,这里是我的配置,所以我猜你应该只更改1.6到1.7

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

谢谢。看起来很奇怪,我不得不告诉Maven使用编译器的默认行为。我曾尝试过'maven-enforcer-plugin'并失败。尽管如此,我可能还没有做到。 – Wes

+0

Maven的默认值为1.5有点奇怪(因为即使1.6过去了),但我也被这一点咬了。我在我的项目中设置了一个父类pom,我使用的任何地方都有JUnit等包含的内容以及将Java默认为更高版本 – Fortyrunner

+0

我有maven 3.1.1,我认为它不太旧。但是在3.2.1版中存在的问题是最近的默认值似乎是1.6,我认为Maven开发人员没有足够的时间来更新它。 –