为什么 Maven 在 Fish 中使用 运行 时使用错误的 JDK 版本?

Why does Maven use the wrong JDK version when running from Fish?

我 运行 macOS Sierra,并安装了 Fish shell (https://fishshell.com/).

当我尝试构建 Maven 项目时,它现在给我

Fatal error compiling: invalid target release: 1.8 ->

... 这意味着它选择了一个较旧的 JDK,它试图用它来构建我的 Java 8 项目。

运行宁 mvn -version:

...
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
...

但是我 JAVA_HOME 设置正确,echo $JAVA_HOME 在两个 shell 中给我:

/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

java -version给我

java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b16)

javac -version

javac 1.8.0_112

echo $PATH在两个 shell 中给出相同的结果(除了在 Bash 中,目录由 : 分隔;在 Fish 中,一个 space </code>):</p> <pre><code>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/ServerRoot/usr/sbin

我已将 maven-compiler-plugin 配置为 1.8:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.6.0</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>${project.build.sourceEncoding}</encoding>
  </configuration>
</plugin>

为什么 Maven 坚持使用 1.6 JDK?当 运行 通过 Bash.

时,同一个项目构建良好,具有正确的 1.8 JDK

如果你是运行旧版本的maven,请尝试更新到最新版本(3.5.0),例如通过自制软件 (brew install maven).