【问题标题】:Maven Won't Compile Java 7 with 1.7 JDKMaven 不会用 1.7 JDK 编译 Java 7
【发布时间】:2015-06-09 23:31:39
【问题描述】:

我一定是反 Maven,因为每次我尝试使用它时,我都会花很多时间挣扎,然后就放弃了。我最新的是,尽管有 1.7 JDK,但我无法编译 Java 7 源代码。

这是mvn compile 的输出。有趣的是,当我使用 Maven 3.0.4 时,错误消息说 -source 1.5 而不是 -source 1.6 with 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

我正在编写一些我想Springify 的 POJO,所以我决定使用 Maven,并在 Spring 站点上找到了 Maven 入门。

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

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

到目前为止,我发现的每件事都表明我的 JAVA_HOME 设置不正确,但我指向的是 1.7 JDK。

【问题讨论】:

  • 提供 POM。您几乎可以肯定没有在那里设置版本。

标签: spring maven


【解决方案1】:

好吧,我有一个类似的问题,我有一个使用 maven 和 eclipse 的项目,但是编译时出现问题,因为 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>

【讨论】:

  • 谢谢。我不得不告诉 Maven 使用编译器的默认行为,这似乎很奇怪。我试过maven-enforcer-plugin 并失败了。不过我可能做得不对。
  • Maven 的默认值 1.5 有点奇怪(考虑到即使 1.6 也已经过时了),但我也被这个问题困扰了。我在我的项目中设置了一个父 pom,我在任何地方都使用它,其中包含 JUnit 等内容以及将 Java 默认为更高版本
  • 我有maven 3.1.1,我觉得还不算太旧。但是最新的3.2.1版本有问题,默认好像是1.6,我觉得maven开发者没有足够的时间来更新它。
  • 可能与向后兼容有关。如果旧的 POM 在升级后工作方式不同,一些用户会感到恼火。任何默认值都可能在某个时候过时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多