编者注:这个问题是在2014年提出的,答案可能已经过时了。


我想用最新的JavaFX编程,它需要Java 8。我使用的是IntelliJ 13 CE和Mac OS X 9 Mavericks。我运行了Oracle的Java 8安装程序,文件看起来像是在

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk

但以前的版本是

/System/Library/Java/JavaFrameworks/jdk1.6....

不知道为什么最新的安装程序把这个放在/Library而不是/System/Library(也不知道有什么区别)。但是/usr/libexec/java_home找不到1.8,所以我找到的所有关于如何设置当前java版本的帖子都不起作用。我已经尝试添加了一个符号链接,使它看起来像1.8在/System/Library中…路径,但没有用。/usr/libexec/java_home -V仍然只列出旧的Java 1.6。

讽刺的是,在“系统首选项”下的“Java”控制面板只显示Java 1.8!

为什么Oracle的安装程序不把它放在它真正应该去的地方?我该如何解决这个问题呢?


当前回答

如果你用的是Mac,那么Homebrew就是安装软件的方式。

似乎版本8不再是最新的,所以它不能使用默认的酿造桶安装java。

相反,我做到了以下几点:

brew install homebrew/cask-versions/

如果这个失败了,直接试试下一个:

brew install homebrew/cask-versions/adoptopenjdk8

使用brew cask list或java -version进行测试

其他回答

如果你的机器上有几个Java版本,你想在运行时动态地选择它,也就是说,在我的情况下,我有两个版本:

ls -la /Library/Java/JavaVirtualMachines
drwxr-xr-x  3 root  wheel    96B Nov 16  2014 jdk1.7.0_71.jdk/
drwxr-xr-x  3 root  wheel    96B Mar  1  2015 jdk1.8.0_31.jdk/

您可以通过修改/etc/profile内容来更改它们。只需在文件末尾添加(或修改)以下两行:

export JAVA_HOME=YOUR_JAVA_PATH/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

在我的情况下,如果我想使用,它应该如下所示:

Java 7:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

Java 8:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

保存文件后,请运行source /etc/profile,它应该可以工作。以下是我使用第一种和第二种选择时的结果:

Java 7:

java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

Java 8:

java -version 
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)

如果您的java文件夹位于不同的位置,这个过程是类似的。

Oracle在简化Java安装和配置方面的记录很差,但使用Homebrew,最新的OpenJDK (Java 14)可以安装:

brew install --cask adoptopenjdk8

对于依赖于旧版本(通常是Java 8)的许多用例,AdoptOpenJDK项目通过一个额外的步骤使之成为可能。

brew tap adoptopenjdk/openjdk
brew install --cask adoptopenjdk8

现有的Homebrew用户可能会遇到错误:Cask adoptopenjdk8存在于多个点击中,这是由于之前使用不同指令的解决方案。这可以通过使用brew install——cask adoptopenjdk/openjdk/adoptopenjdk8完全指定位置来解决。

截至2022年5月17日,本网站有jre8u33的下载链接: https://java.com/en/download/mac_download.jsp

它是一个dmg,将在MacOS上安装java 8。

对于在我的本地计算机上运行应用程序,我开始真正喜欢的一个选项是使用Docker。你可以简单地在官方的JDK容器中运行你的应用程序——这意味着你不必担心在本地机器上设置一切(或者为不同的应用程序运行多个不同版本的JDK等)。

虽然这可能不会帮助您解决当前的安装问题,但这是一种解决方案,意味着您可以避开与试图在开发机器上正确运行Java相关的问题的雷区!

好处是:

不需要在您的本地机器上设置任何版本的Java(您只需要在从Docker Hub中取出的容器中运行Java即可) 只需更改容器上的标记,就可以轻松切换到不同版本的Java。 项目依赖项安装在容器中——所以如果你搞砸了你的配置,你可以简单地破坏容器并重新开始。

一个非常简单的例子:

创建Dockerfile:

FROM java:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp

这里我们指定运行SDK版本8的Java容器(Java:8 -要使用Java 7,您只需指定:Java:7) 我们将本地目录映射到容器内的目录:/usr/src/myapp

创建一个docker-compose。yml文件:

version: "2"

services:
  java:
    build: .
    volumes:
      - .:/usr/src/myapp

现在,假设我们有这个Java文件:

HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {        
        System.out.println("Hello, World");
    }
}

所以我们有如下的文件结构:

.
|_ Dockerfile
|_ docker-compose.yml
|_ HelloWorld.java

你可以做各种Java的事情,比如:

编译:

docker-compose run --rm java javac HelloWorld.java 

您应该注意到,HelloWorld.class显示在您的当前目录中(这是因为我们已经将当前目录映射到代码所在的容器内的位置

run:

docker-compose run --rm java java HelloWorld 

注意:第一次运行时,它将获取图像等。这需要一段时间,因为这只是第一次发生 Docker-compose run——从容器内部运行命令 -rm告诉docker在命令运行完成后删除容器 Java是服务/容器的名称(来自我们的docker-compose文件),该命令将对其运行 这一行的其余部分是在容器中运行的命令。

这是一种非常酷的方式,可以为不同的应用程序运行不同版本的Java,而不会使您的本地设置完全混乱:)。

下面是一个稍微复杂一点的例子,它有Maven和一个简单的Spring应用程序

免责声明:

我还没有在IntelliJ这样的IDE中真正尝试过这一点——所以不完全确定这方面的事情将如何工作。虽然看起来docker支持即将到来 下面是一个使用Spring Boot、Zuul和Docker运行微服务的复杂示例

Brew search openjdk 找到一些openjdk公式,在2021年,brew将提供openjdk11和openjdk8作为选项。