编者注:这个问题是在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的安装程序不把它放在它真正应该去的地方?我该如何解决这个问题呢?


当前回答

在2022年,你可以只使用酿造

brew install openjdk@8

也许你需要更新PATH env:

export PATH="/usr/local/opt/openjdk@8/bin:$PATH"

为未来试一试的人,胜过酝酿的人

curl -s "https://get.sdkman.io" | bash

然后打开一个新的shell和try列表,看看你可以安装什么;-)

sdk list java 

在写这篇文章的时候,安装java 8你可以使用:

sdk install java 8.0.322-tem 

注意:更新install命令以匹配运行sdk list java中的一些现有标识符show

其他回答

对于在我的本地计算机上运行应用程序,我开始真正喜欢的一个选项是使用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 jdk
$ brew install --cask homebrew/cask-versions/adoptopenjdk8
$ /usr/libexec/java_home

 

请运行以下命令,它将在OS X上安装Java 8:

brew tap adoptopenjdk/openjdk
brew install --cask homebrew/cask-versions/adoptopenjdk8

注意:

Adoptopenjdk8已正式停产上游。 在最新版本的macOS中,它可能会停止正确工作(或完全停止工作)。所以,这是目前工作,但是,请不要使用这个答案来安装Java 8

试一试:

brew cask install java 8

它将给出下面的结果

8tracksradiohelper       adoptopenjdk8            amitv87-pip              
corretto8                icons8                   vmware-fusion8           
x48                      zulu8

下一个输入:

brew cask install adoptopenjdk8

---- java 8将安装在Mac上。

我也有同样的问题要解决,因为我需要安装JDK8来运行Android SDK管理器(因为它似乎与JDK9不太配合)。 然而,我告诉你我是如何解决Mac (Sierra)上的所有问题的。

首先,你需要和cask和jenv一起酿酒。

You can find an useful guide here,Homebrew Cask Installation Guide. Remember to tap 'caskroom/versions' running in the terminal: brew tap caskroom/versions After that, install jenv with: brew install jenv Install whatever version you want with cask brew cask install java8 (or java7 or java if you want to install the latest version, jdk9) The last step is to configure which version to run (and let jenv to manage your JAVA_HOME) jenv versions to list all versions installed on your machine and then activate the one you want with jenv global [JDK_NAME_OF_LIST]

你可以在这个Github Gist brew-java-and-jenv上找到其他有用的信息。在Mac和Jenv网站上安装多个JDK