繁体   English   中英

JAVA_HOME 在 OSX 上使用 Eclipse 和 Maven

[英]JAVA_HOME on OSX with Eclipse and Maven

我最近设置了一台 OSX 机器,但在 Eclipse 中运行时,我无法让 Maven 获取 JAVA_HOME。

到目前为止,我已经完成了以下工作:

  1. 使用export JAVA_HOME=$(/usr/libexec/java_home)在 ~/.bash_profile 中设置 JAVA_HOME
  2. 在 eclipse.ini 中为 Eclipse 指定 VM 为-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/java
  3. 使用echo JAVA_HOME=\\ /usr/libexec/java_home -v 1.7` 在/etc/mavenrc设置 JAVA_HOME | 须藤 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位置?

问题是在 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值。 (请注意, .bash_profile常用的技巧和$(/usr/libexec/java_home)launchd.conf不起作用 - 或者至少我无法让它工作)

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

编辑:为了改进我的答案,另见这个答案: https : //stackoverflow.com/a/23078977/451941

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

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

/etc/launchd.conf中放置指令就足够了

getenv JAVA_HOME

然后,在/etc/bashrc

export JAVA_HOME=`/usr/libexec/java_home`

然后,重新登录(不需要重新启动 ;-),Eclipse 就可以像 Maven 预期的那样工作。

以上不再适用于优胜美地的图形应用程序! 像 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?

Eclipse 使您能够指定启动环境变量。 在那里做。

这个解决方案最适合我:

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

在此博客中查看更多详细信息。

解决这个问题的一个简单方法,在 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>
  1. 在您的主目录中:(/Users/{username})

  2. nano .bash_profile 并添加以下行:

    出口
    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”存在。

您可能正在寻找 ~/.MacOSX/environment.plist

向 environment.plist 添加新行以设置您首选的 JAVA_HOME 例如

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

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

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

在打印错误的 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 中,检查是否为 JDK 正确选择了 Maven 的 JRE。

Maven Runner Java Runtime (JRE) 需要指定JDK(不是 JRE) ,因为 javadoc 命令不包含在 JRE 中。 因此, Use Internal JRE不适用于 maven attach-javadocs。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM