通过Maven编译Java 7代码

时间:2012-12-26 16:05:26

标签: java maven

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

哪里可以定义?我有多次来源(d)我的.zshrc。

18 个答案:

答案 0 :(得分:153)

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

答案 1 :(得分:109)

尝试使用更新版本的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代码很快就会出现: - )

答案 2 :(得分: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

答案 3 :(得分:26)

请检查pom.xml以获取以下标签

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

它应该指向所需的jdk版本

答案 4 :(得分: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

答案 5 :(得分:19)

你必须检查Maven版本:

mvn -version

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

答案 6 :(得分:4)

诊断:

您可以通过运行&#34; mvn --version&#34;

来查看Maven使用的Java版本

Debian的解决方案:

mvn脚本通过查找javac(哪个javac)在内部设置JAVA_HOME env变量。因此,如果您同时安装了多个Java版本,例如JDK 6和JDK 7并使用Debian Alternatives系统在它们之间进行选择,即使你改变了&#34; java&#34;对于JDK 7,mvn仍将使用JDK 6.您还必须更改&#34; javac&#34;的替代方案。 E.g:

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

编辑:

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

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

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

答案 7 :(得分:2)

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

Goto:Preferences-&gt; Java-&gt; Compiler-&gt; Compiler Compliance Level-&gt; 1.7 应用 确定

重新启动IDE。

确认项目的编译器设置 - 转到:项目属性 - &gt; Java编译器 - &gt;取消选中(在执行环境中使用合规性&#39; JavaSE-1.6&#39;在java Build路径上。)并从下拉列表中选择1.7。 (如果已经1.7,请忽略)

重新启动IDE。

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

mvn -Dtest=<test class name> test

答案 8 :(得分:2)

不确定操作系统在这里使用的是什么,但你可以用update-java-alternatives来消除很多java版本的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。

答案 9 :(得分:2)

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

<version>3.0</version>

我也看到了以下内容:

<compilerVersion>1.7</compilerVersion>

答案 10 :(得分:2)

在eclipse中右键单击你的项目并打开“运行配置”..检查那里的jre版本。 有些时候,即使在构建路径中更改版本,默认情况下这也不会在eclipse中更改。

答案 11 :(得分:1)

{JAVA_1_4_HOME} / bin / javacyou也可以尝试......

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

答案 12 :(得分:1)

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

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

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

答案 13 :(得分:0)

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

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

答案 14 :(得分: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>

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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