通过 Maven 编译 Java7代码

我的文件清单

<project>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
...

但是在 mvn clean install上,我得到了什么

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -version是(这里是 which java点)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac还指向正确的 Java 版本

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

在这台机器上,我使用的是 zsh(echo $0返回 -zsh)

在我的 .zshrc中,我定义了:

 33 # HOME
34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
35 SCALA_HOME=/Library/Scala/current
36 FORGE_HOME=~/tools/forge/
37
38 # PATH
39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
40 PATH=${PATH}:${JAVA_HOME}/bin
41 PATH=${PATH}:/bin/
42 PATH=${PATH}:/sbin/
43 PATH=${PATH}:/usr/bin/
44 PATH=${PATH}:/usr/sbin/
45 PATH=${PATH}:/opt/local/bin/
46 PATH=${PATH}:/opt/local/sbin/
47 PATH=${PATH}:/usr/local/git/bin
48 PATH=${PATH}:/usr/local/git/sbin
49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
50 PATH=${PATH}:${SCALA_HOME}/bin
51 PATH=${PATH}:${FORGE_HOME}/bin
52
53 export PATH

当我运行 mvn clean install --debug时,我发现实际上我使用的是 Java6

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
2 Maven home: /usr/share/maven
3 Java version: 1.6.0_35, vendor: Apple Inc.
4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

在哪里可以定义它? 我已经多次使用 source (d) my. zhrc。

246374 次浏览

你可以尝试一个新的插件; 在 maven 站点上:

<version>3.0</version>

我也看到了下面这些:

<compilerVersion>1.7</compilerVersion>

尝试使用新版本的 maven 编译器插件:

    <plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>

此外,在 maven 中指定源文件编码在全局范围内更好:

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

编辑 : 由于这个答案仍然受到关注,我只想指出,最新的值(截至最近的编辑)是3.2为 maven 编译器插件和1.8为 java,作为问题编译 java 8代码通过 maven 必将出现: -)

检查 maven 安装中的 mvn脚本,看看它是如何构建命令的。也许你或其他人已经硬编码了一个 JAVA_HOME在那里,并忘记了它。

你必须检查 Maven 版本:

mvn -version

您将找到 Maven 用于编译的 JAVA 版本。如果需要,您可能需要重置 JAVA _ HOME。

{ JAVA _ 1 _ 4 _ HOME }/bin/javacyou can try also...

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<executable>{JAVA_HOME_1_7}/bin/javac</executable>
<fork>true</fork>
</configuration>
</plugin>

好吧,这个问题也是我自己解决的。JAVA _ HOME 更为重要,如果与 Maven 插件的源/目标属性相比没有更低的版本或没有版本,就会得到这个错误。

确保在 JAVA _ HOME 中有一个好的版本,并将其包含在 PATH 中。

我也有同样的问题,为了解决这个问题,我关注了这篇博客文章: http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile


export JAVA_HOME=$(/usr/libexec/java_home)


$ source .bash_profile


$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

@ mkyong的特别谢谢

编辑: 现在我使用: JEnv + Sdkman

尝试更改 Eclipse 中的属性中的 Java 编译器设置-

Goto: 参数设置-> Java-> 编译器-> 编译器兼容级别-> 1.7 申请 好吧

重启 IDE。

确认项目的编译器设置- Goto: Project Properties-> Java Compiler-> Uncheck (在 Java Build 路径上使用来自执行环境‘ JavaSE-1.6’的遵从性)从下拉列表中选择1.7。(忽略1.7)

重启 IDE。

如果问题仍然存在-在终端中使用命令运行单个测试用例-

mvn -Dtest=<test class name> test

不确定这里使用的是什么操作系统,但是你可以通过 update-java 替代方案消除大量的 java 版本,从而在整个系统范围内设置默认的 jvm。

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

要设置一个新的,请使用:

#> update-java-alternatives -s java-7-oracle

不需要为大多数应用程序设置 JAVA _ HOME。

我也有同样的问题。我发现这是因为 Maven 脚本查看了下面的 CurrentJDK 链接并找到了一个1.6 JDK。即使您安装了最新的 JDK,也无法解决这个问题。您可以在 $HOME/中设置 JAVA _ HOME。我选择了 bash _ profile 脚本来修复符号链接,如下所示:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

注意 CurrentJDK 指向1.6.0. jdk

为了解决这个问题,我运行了以下命令(您应该检查您安装的版本并进行相应的调整)。

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

诊断:

您可以通过运行“ mvn —— version”查看 Maven 使用的 Java 版本

Debian 的解决方案:

Mvn 脚本通过查找 javac (其中 javac)在内部设置 JAVA _ HOME env 变量。因此,如果你同时安装了多个 java 版本,比如 JDK 6和 JDK 7,并使用 Debian Alternative 系统在它们之间进行选择,即使你将“ java”的替代版本改为 JDK 7,mvn 仍然会使用 JDK 6。你还得把“ javac”改成“ javac”。例如:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

编辑:

实际上,一个更好的解决方案是使用 update-java-options (例如)

# update-java-alternatives -s java-1.7.0-openjdk-amd64

因为这将改变 所有,使其成为各种 Java 工具的替代品(有十几种左右)。

您可能指定了一个错误的 java 版本。 Java-version (在您的终端中)来检查您正在使用的 java 版本。 转到 Maven 编译插件获取最新的 maven 编译器版本 如果你使用的是 java 6,而最新版本的 maven 编译器插件是3.1,那么你的插件可能就是这个样子

<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>

请在 pom.xml 中查看以下标记

<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>

它应该指向所需的 jdk 版本

以前的答案都没有完全解决我的用例。

需要删除正在生成的目录。清除。然后重新安装。看起来像是静默权限问题。

在 eclipse 中右键点击你的项目,打开“ Run Configuration”. . 检查 jre 版本。 有时甚至在构建路径中更改了版本之后,在 Eclipse 中默认情况下这不会更改。

我在 IntelliJ IDEA 14中遇到过这个问题,直到我进入文件菜单-> 项目结构,将项目 SDK 更改为1.7,项目语言级别更改为7。

我在使用 eclipse 时遇到了这个问题,我必须更改项目的构建路径,以便它引用 jre7

对于需要(非默认的 /etc/alternatives/java) JVM 的特定编译,可以考虑在 mvn命令前面加上像下面这样的 JAVA_HOME,

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

这里,我们假设默认值是 Java8,而对于手头的特定项目,我们需要 Java7。