在OSX上使用Eclipse和Maven设置JAVA_HOME

14

我最近配置了一台OSX机器,但在Eclipse中运行Maven时出现了无法获取JAVA_HOME的问题。

到目前为止,我已经完成以下步骤:

  1. 在 ~/.bash_profile 中使用 export JAVA_HOME=$(/usr/libexec/java_home) 设置了 JAVA_HOME。
  2. 在 eclipse.ini 中指定了 Eclipse 的虚拟机:-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/java
  3. /etc/mavenrc 中设置了 JAVA_HOME:echo JAVA_HOME=\/usr/libexec/java_home -v 1.7` | sudo tee -a /etc/mavenrc`

从命令行界面(CLI)工作时,一切似乎都如预期那样。输入 java -version 命令,结果为:

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

echo $JAVA_HOME 的输出结果为:

/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

mvn -v 打印:

Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 17:22:22+0200)
Maven home: /usr/local/Cellar/maven/3.1.1/libexec
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9", arch: "x86_64", family: "mac"

在CLI中运行mvn install同样也适用于项目。但是从Eclipse内部执行相同操作会导致以下错误:

Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar (attach-javadocs) on project suppress-warnings: MavenReportException: Error while creating archive: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set.

Eclipse > Preferences > Java > Installed JREs 中,我看到与 JAVA_HOME 指定的位置相同的 JDK 7 被设置为默认值,并且也被用于我的项目。 在内嵌的 Maven 运行时和外部安装之间切换会产生相同的结果。

我该在哪里或如何设置 JAVA_HOME,以使在 Eclipse 中启动的 Maven 进程得到正确的 JAVA_HOME 位置?

11个回答

15

问题在于Mac OSX上,.bashrc.bash_profile中定义的环境变量仅被导出到终端环境。像Eclipse这样的捆绑GUI应用程序无法看到它们,因此从Eclipse执行的任何运行配置也不能看到它们。

解决方案是创建(如果不存在)或编辑文件/etc/launchd.conf并在其中添加以下行:

setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

当然,将其修改为您实际的JAVA_HOME值。(请注意,在launchd.conf中通常使用$(/usr/libexec/java_home)的技巧无法生效 - 或者至少我无法使其生效)

完成这些操作后,您需要重新启动计算机。重新启动后,M2E Maven运行配置将能够看到JAVA_HOME变量并正确执行。

编辑:有关我的答案的完善,请参见此答案:https://dev59.com/P2Ij5IYBdhLWcg3wYkRY#23078977


4

我无法评论Jeen Broekstra的答案,因为我是一名新手 :-(

他的解决方案很好,只需要稍微改进一下。

/etc/launchd.conf中,只需放置以下指令即可:

getenv JAVA_HOME

然后,在 /etc/bashrc 中:
export JAVA_HOME=`/usr/libexec/java_home`

然后,重新登录(不需要重新启动电脑;-)),Eclipse与Maven的集成就可以正常工作了。


3

在Yosemite中,以上内容不再适用于图形应用程序!例如eclipse或使用Spotlight启动的任何应用程序。 (.bash_profile、launchd.conf仅适用于终端会话。) 在启动eclipse之前,只需打开一个终端窗口,并发出以下命令:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(使用你的安装路径!也许可以使用$(/usr/libexec/java_home)代替完整路径。)

在这里查看有关永久解决方案的完整文章:设置launchd.conf通过环境变量不再适用于OS X Yosemite?


link - Pálossy László

2

这个解决方案对我来说最有效:

  • 添加 /etc/mavenrc 文件。
  • 在文件中添加 JAVA="/path/to/your/jdk"。
  • 无需重新启动或注销,Maven立即使用更改。

在这篇博客中查看更多细节。


2
Eclipse可以让你指定启动环境变量,只需在此处设置即可。

@Rob,你能详细说明一下吗?我也遇到了完全相同的问题,但是我一直没有找到你所说的主配置。 - Jeen Broekstra
针对 Eclipse 中项目的"设置默认启动配置选项"是否有存在?或者像这个问题(https://dev59.com/W0vSa4cB1Zd3GeqPbhzy?lq=1)中提到的,通过一个方法来确定环境变量并用于所有新的运行配置。 - Rob
@JeenBroekstra 这个怎么样:http://wiki.eclipse.org/Debug/Plan/3.6/Launch_Templates - Rob
真的很抱歉 @JeenBroekstra!昨晚我花了很长时间在那个默认配置页面上转圈找寻。以前找到它就像一场噩梦,现在我想它可能已经消失了。 - Rob
1
根据@Rob的建议,在“Run AS -> Environment Variable”下添加环境变量JAVA_HOME[启动环境变量],添加了新变量'JAVA_HOME'并设置正确路径,这对我很有效。+1 - Raghu
显示剩余5条评论

1

解决这个问题的简单方法是,在pom.xml中添加以下配置:

<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>

完整代码:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
                <show>private</show>
                <nohelp>true</nohelp>
                <aggregate>true</aggregate>
                <charset>UTF-8</charset>
                <encoding>UTF-8</encoding>
                <docencoding>UTF-8</docencoding>
                <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>javadoc</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

0
在pom.xml中查找maven-javadoc-plugin的artifactId并打印错误,并将java.home作为javadocExecutable配置添加:
<plugin>
    ...
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
      <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
    </configuration>
    ...
</plugin>

原因:使用应用程序自己的“java.home”值是最好和最简单的方法,因为它消除了对操作系统本地变量设置的依赖,这些变量在另一个容器中可能会有所不同。


如果您正在使用Eclipse 2020-03,而您的$JAVA_HOME是Java 14,则需要在<javadocExecutable>中使用Java 14 javadoc的绝对路径,因为eclipse.ini中的-vm路径必须设置为Java 13。 - B. Stackhouse

0
我遇到了同样的问题。尝试了Robert和Jeen的解决方案,但出于某种原因它没有起作用。所以对我有效的一个非常简单的解决方案是在eclipse中添加JAVA_HOME作为环境变量。在eclipse项目的maven配置中,将JAVA_HOME添加到环境变量列表中。

0

你可能正在寻找~/.MacOSX/environment.plist文件

在environment.plist中添加一行新的内容,以设置您首选的JAVA_HOME,例如:

JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home

在此处设置的envvars将被应用程序(包括Eclipse)“看到”。


0
  1. 在您的主目录下:(/Users/{username})

  2. 使用nano .bash_profile命令并添加以下行:

    export
    JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0_31-b04-413.jdk/Contents/Home`

  3. 确保路径"/Library/Java/JavaVirtualMachines/1.6.0_31-b04-413.jdk/Contents/Home"存在。


我已经做了,只是你建议使用Java 6而不是7。那会有什么帮助呢? - user3054594

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接