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


当前回答

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

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完全指定位置来解决。

最简单的答案是Zulu java预构建。他们甚至带有一个安装程序,为你做所有的工作。

https://www.azul.com/downloads/?version=java-8-lts&os=macos&package=jdk

Eclipse Temurin是adoptopenjdk的官方继承者。 因此,从2022年5月开始,我会使用以下方法

brew install --cask temurin8

安装完成后,JDK 8安装在/Library/Java/JavaVirtualMachines/temurin-8.jdk目录下

我有同时使用Java 7和Java 8的应用程序,并且必须一直来回运行。

我使用Johan写的这个脚本:

http://www.jayway.com/2014/01/15/how-to-switch-jdk-version-on-mac-os-x-maverick/

现在可以在启动时设置它,或者在启动后调用脚本。 安装Mac版JDK

Java 7

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Java 8

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


更新推荐! !:

使用jenv https://www.jenv.be/和自制。

然后它只是jenv global oracle6401.6.0.39和它的集合。