通过Maven编译Java 7代码

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

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

尝试使用更新版本的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,因为有关通过maven编译的Java 8代码的问题是必然的很快出现:-)

我有同样的问题,并解决这个问题,我按照这篇博客文章: 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特别的tks

编辑:现在我使用: jEnv + sdkman

请检查你的pom.xml中的下面的标签

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

它应该指出所需的jdk版本

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

 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 

你必须检查Maven版本:

 mvn -version 

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

诊断:

您可以通过运行“mvn –version”来查看Maven使用哪个Java版本

Debian解决scheme:

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

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

编辑:

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

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

详见https://wiki.debian.org/JavaPackage ,因为这将改变各种Java工具的select(有十几个)。

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

 <version>3.0</version> 

我也看到了以下内容:

 <compilerVersion>1.7</compilerVersion> 

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

转到:首选项 – > Java->编译器 – >编译器符合级别 – > 1.7应用好吧

重新启动IDE。

确认项目的编译器设置 – 转到:项目属性 – > Java编译器 – >取消选中(使用Java Buildpath上执行环境“JavaSE-1.6”的合规性),并从下拉列表中select1.7。 (如果已经是1.7,则忽略)

重新启动IDE。

如果问题仍然存在 – 使用命令在terminal-

 mvn -Dtest=<test class name> test 

不知道在这里使用的是什么操作系统,但是你可以使用update-java-alternatives来消除大量的使用debian / ubuntu的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。

在Eclipse中右键单击你的项目,然后打开“运行configuration”..检查在那里的JRE版本。 在eclipse中,甚至在更改buildpath中的版本后,有时候这个默认值也不会改变。

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

对于一个需要(非默认的/etc/alternatives/java )JVM的特定编译,考虑用这样的JAVA_HOME作为前缀mvn命令,

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

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

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

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

你可能会指定一个错误的java版本。 java -version(在你的terminal)检查你使用的Java版本。 转到最新的Maven编译器版本的Maven-compile-plugin如果您使用的是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> 

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

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

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

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