155

我的 pom 文件列表

<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

在这台机器上,我正在使用zshecho $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我发现实际上我使用的是 Java 6

  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) 我的 .zshrc 。

4

18 回答 18

153

检查mvnmaven 安装中的脚本以查看它是如何构建命令的。也许您或其他人在其中硬编码了 aJAVA_HOME并忘记了它。

于 2012-12-26T16:50:18.967 回答
110

尝试使用更新版本的 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>

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

于 2012-12-26T16:14:40.620 回答
48

我有同样的问题,为了解决这个问题,我关注了这篇博客文章: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

于 2013-11-17T21:04:02.913 回答
27

请检查 pom.xml 中的以下标签

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

它应该指向所需的 jdk 版本

于 2014-09-05T07:52:00.520 回答
19

您必须检查 Maven 版本:

mvn -version

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

于 2013-03-27T11:38:12.683 回答
19

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

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
于 2014-04-03T20:44:12.940 回答
4

诊断:

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

Debian的解决方案:

mvn 脚本通过查找 javac(which javac)在内部设置 JAVA_HOME 环境变量。因此,如果您同时安装了多个 java 版本,例如 JDK 6 和 JDK 7,并使用 Debian Alternatives 系统在它们之间进行选择,即使您将“java”的替代品更改为 JDK 7,mvn 仍将使用 JDK 6。您也必须更改“javac”的替代方案。例如:

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

编辑:

实际上,更好的解决方案是使用 update-java-alternatives (eg)

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

https://wiki.debian.org/JavaPackage中所述,因为这将改变各种 Java 工具的所有替代品(大约有十几个)。

于 2014-05-28T22:11:45.373 回答
2

你能尝试一个更新的插件吗?在 Maven 网站上:

<version>3.0</version>

我也看到了以下内容:

<compilerVersion>1.7</compilerVersion>
于 2012-12-26T16:14:06.723 回答
2

尝试在 Eclipse 的 Properties 中更改 Java 编译器设置-

转到:Preferences->Java->Compiler->Compiler Compliance Level->1.7 Apply Ok

重启IDE。

确认项目的编译器设置-转到:项目属性->Java编译器->取消选中(在java构建路径上使用执行环境'JavaSE-1.6'的合规性。)并从下拉列表中选择1.7。(如果已经是 1.7 则忽略)

重启IDE。

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

mvn -Dtest=<test class name> test
于 2014-03-20T19:00:46.547 回答
2

不确定这里使用的是什么操作系统,但是您可以使用 update-java-alternatives 来消除很多 java 版本的 futzing un debian/ubuntu 以设置默认的 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。

于 2014-03-31T23:51:53.347 回答
2

在 Eclipse 中右键单击您的项目并打开“运行配置”..检查那里的 jre 版本。有时这在 Eclipse 中默认不会改变,甚至在构建路径中更改版本之后。

于 2014-10-13T12:21:20.377 回答
2

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

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

这里我们假设默认是 Java 8,而对于手头的特定项目,我们需要 Java 7。

于 2016-06-10T09:42:44.680 回答
1

{JAVA_1_4_HOME}/bin/javac你也可以试试...

<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>
于 2013-04-09T08:23:27.610 回答
0

好的,我也自己解决了这个问题。更重要的是您的 JAVA_HOME,如果与 Maven 插件的源/目标属性相比,您没有更低的版本或没有版本,您将收到此错误。

确保在您的 JAVA_HOME 中有一个好的版本并将其包含在您的 PATH 中。

于 2013-09-30T19:07:56.673 回答
0

您可能指定了错误的 java 版本。java -version(在您的终端中)检查您正在使用的 java 版本。转到maven-compile-plugin获取最新的 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>
于 2014-08-30T12:27:09.603 回答
0

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

需要删除正在构建的目录。干净的。然后重新安装。看起来像一个静默的权限问题。

于 2014-10-10T22:29:30.550 回答
0

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

于 2015-05-05T15:59:56.033 回答
0

我在使用 eclipse 时遇到了这个问题,我不得不更改项目的构建路径,以便它引用 jre 7

于 2016-02-10T15:40:22.127 回答