【发布时间】:2021-03-19 12:26:16
【问题描述】:
在我的 IDE VSCode 中,我使用“Java”docker 容器配置了 Language support for Java(TM) by Red Hat 扩展。到目前为止,我已经能够设置运行时,但是我没有设法将我的 IDE 指向 docker 容器的 Java 主目录。
根据扩展程序的页面,这是我需要实现的才能使扩展程序工作:
此 JDK 将用于启动 Java 语言服务器。并且默认情况下,也将用于编译您的项目。
可以通过 VS Code 设置(工作区/用户设置)中的
java.home设置指定 Java 开发工具包的路径。如果未指定,则按以下顺序搜索,直到 JDK 满足当前最低要求。
JDK_HOME环境变量JAVA_HOME环境变量- 在当前系统路径上
我如何设置运行时
正如我已经说过的,我设法设置了一个运行时。我就是这样做的:
-
为 docker 容器添加了一个
java二进制文件,在我的例子中,我把它放在/usr/local/bin中。#!/bin/sh docker run \ --name usr-local-bin-java \ -i \ --rm \ --network=host \ -w /root/project \ -v "$PWD":/root/project \ -v "$PWD"/.docker/mvn/cache:/root/.m2 \ maven:3-jdk-8-slim \ java "$@" exit $?我正在使用 Maven 映像,因为我还需要 Maven,其中还包括 Java。当然也可以使用 OpenJDK 映像。
-
使用以下内容添加/更新了我的 IDE 用户
settings.json:"java.configuration.runtimes": [ { "name": "JavaSE-1.8", "path": "/usr/local/bin/java", "default": true } ],
我被困在哪里
所以我面前的最后一步是指定java.home 的路径。但是,如果它位于 docker 容器中,我将如何做到这一点?那么最明显的解决方案是将docker容器中的路径安装到我的主机上。不幸的是,这不起作用,因为我需要的路径存储在 docker 映像中,因此当我将主机挂载到该路径时,它将导致一个空目录。
总结一下这个行不通(注意:我的docker镜像中的java home位于/usr/local/openjdk-8):
- 将以下参数添加到
java二进制文件中,以设置卷挂载:-v "$PWD"/.docker/java/jdk:/usr/local/openjdk-8 \ - 将
java.home属性添加到settings.json配置:"java.home": "${cwd}/.docker/java/jdk",
这将导致类似:“java.home 配置未指向有效的 JDK”。
有谁知道:我在这里有哪些选择?我可以指向交互式自动删除 docker 容器中的目录吗?
PS:我不想直接在我的操作系统上安装 JDK。
更新 #1:我设法将一个卷从 docker 容器安装到我的主机
- 创建一个新的 docker 卷:
docker volume create openjdk - 将卷挂载参数添加到
java二进制文件中:-v openjdk:/usr/local/openjdk-8 \ - 运行二进制文件:
java -version - 将
JDK_HOME或JAVA_HOME变量添加到您的bash 环境中:JAVA_HOME="$(docker inspect -f '{{ index .Mountpoint }}' openjdk)" - 重新加载 IDE 并出现错误...
运行 Java 扩展需要 Java 11 或更高版本。请下载并安装最新的 JDK。您仍然可以通过配置 'java.configuration.runtimes' 来使用旧 JDK 编译您的项目
我什至尝试将java.home属性直接设置为卷的挂载点,导致权限被拒绝错误,因此我chmod +rx -R我的整个“var lib docker”目录(存储卷的地方) .最终发生了与上述步骤相同的错误。
【问题讨论】:
标签: java docker visual-studio-code