1

请原谅以前似乎回答过的问题,但如果我阅读 10 篇不同的帖子,我会发现 20 种不同的回复。

我刚刚安装了 Fedora 25。我将学习 Java 开发,需要设置我的环境。我将使用 openjdk 并安装了 java-1.8.0-openjdk-devel。我也将使用 Maven。

现在我需要设置我的$PATH$JAVA_HOME变量。

我尝试了此处找到的答案(Fedora OpenJDK Set JAVA_HOME

但是在添加到我的 .bashrc 之后

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

然后进行测试,我得到了在我看来是错误的答案,因为我认为最后不应该有 /jre/

> echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b14.fc25.x86_64/jre/

那么请问我应该将 JAVA_HOME 设置为什么,这样我就不需要在每次 openjdk 更新时都更新它?

在那之后,我认为 PATH 只是

export PATH=$JAVA_HOME/bin:$PATH

这似乎是一件很简单的事情,但在我看来有很多困惑。谢谢

PS 另外,.bashrc 甚至是正确的地方吗?因为我在这里(https://askubuntu.com/questions/175514/how-to-set-java-home-for-java)看到 /etc/environment 会更合适)thx

4

7 回答 7

4

我建议创建一个别名命令,修改 bashrc 并设置JAVA_HOME 为 bash_profile,这个:

  1. 在 bashrc 中创建命令:

    alias set-java='sudo alternatives --config java;export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::");source  ~/.bash_profile'
    

保存并执行:source ~/.bashrc

  1. 在 bash_profile 中创建泛型JAVA_HOME

    export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
    PATH=$JAVA_HOME/bin:$PATH
    
  2. 执行别名命令

于 2017-09-22T22:10:39.460 回答
2

设置 JAVA_HOME :

echo "JAVA_HOME=/etc/alternatives/jre" >> ~/.profile
source ~/.profile
echo $JAVA_HOME
于 2017-09-06T00:14:04.313 回答
1

与 Fedora 捆绑在一起的 OpenJDK 对我不起作用。例如 IntelliJ 不能使用这个版本。在我看来,最好的选择是从 Oracle 安装 Oracle JDK RPM。

JDK位置:

/usr/java/latest/

要操作 JRE,请使用以下命令:

sudo alternatives --config java
于 2017-09-12T16:26:11.780 回答
1

到目前为止,这让 Android Studio 使用 Fedora 提供的 OpenJDK 运行,并尊重分发提供的材料,而没有一堆其他非托管的符号链接:

vim ~/.bash_profile

添加以下内容,或替换任何与其相似的现有示例:

 export JAVA_HOME=$(readlink -f /usr/bin/java | cut -d/ -f1-6)

该命令基本上询问符号链接 /usr/bin/java 指向的物理路径(由 Fedora 中的替代项配置),然后说“通过 / 字符拆分来获取给您的前 6 个字段”。

请注意,您的 $PATH 已经正确设置为与 Fedora 提供的 OpenJDK 一起使用。

在实践中,这最终看起来像:

 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-8.fc28.x86_64/jre

这假设您至少有一个 Fedora 提供的 OpenJDK 包。25 可能只发了 1.8,28 发了 1.8、10.0.2 和 11.0.1。(如果您正在阅读本文并且仍在使用 25,那么可能是时候升级了。)

安装您可用的 java-*-openjdk-headless 软件包之一(或 Oracle 提供的软件包之一),并配置使用哪一个:

 sudo alternatives --config java

我的 Fedora 28 安装的默认设置是使用 OpenJDK 1.8。

于 2018-11-30T06:08:29.547 回答
1

我将以下内容放在 ~/.profile 中,而不是 ~/.bashrc 中,我认为在 Fedora 上也是如此(我在工作中使用 CentOS 并做了同样的事情):

export JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME=$JDK_HOME/jre

更改 .profile 后,我必须退出或重新启动。

在 Ubuntu 上,java 几年前才从 7 变为 8。我不知道为什么 Fedora 想要在 java 文件夹上放一个确切的版本号。你可能会抱怨?

如果 Java 在 Fedora 上移动太多,请使用符号链接。符号链接立即生效,无需注销或重新启动。在我的笔记本电脑上,我加密了我的主文件夹,因此为了提高速度,我将大多数第三方工具放在 /tools/ 文件夹中,并让自己的帐户访问它(我的用户 IDsudo chown -R myself.myself /tools/在哪里myself)。那就是我安装 maven 的地方。Tomcat 为每个版本使用不同的目录名称,因此我创建了一个符号链接,如下所示:

cd /tools
ln -s apache-tomcat-8.0.38 latest-tomcat

然后在 ~/.profile 中(在这个例子中,CATALINA 表示 TOMCAT - 不要问我为什么):

# My un-encrypted Tools folder
export TOOLS=/tools
# Tomcat
export CATALINA_HOME=$TOOLS/latest-tomcat
# Maven
export M2_HOME=$TOOLS/apache-maven-3.3.9/
export M2="$M2_HOME"bin
export PATH=$PATH:$M2

当我升级tomcat时:

cd /tools
rm -f latest-tomcat
ln -s apache-tomcat-8.0.39 latest-tomcat

您可以使用相同的技术制作/usr/lib/jvm/latest-java. 事实上,如果您安装 Oracle Java(不一定推荐),它正是出于这个原因。

是的,你所说的路径对我来说是正确的。我没有将 java 放在我的路径中,更喜欢使用$JDK_HOME, $JAVA_HOME,或者只是调用 maven。其中一部分是为了安全。部分原因是感觉我总是知道我正在使用哪个版本的 Java。

PS 对我来说,ln -s语法总是看起来好像参数是颠倒的。首先是实际的文件夹名称,然后是您想要的别名/链接。

于 2017-02-01T16:59:08.333 回答
0

也许添加一个tr可以工作?export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::" | tr -d "/jre/")?

此外,将其设置在您的 env var 中将使 var 独立于您使用的 sh。这是存储它的好方法。

于 2017-02-01T16:38:56.177 回答
0

遗憾的是我没有可用的 Fedora,所以我无法调查 Java 通常是如何安装的,但为什么你不尝试用 /usr/bin/javac 之类的东西替换表达式中的 /usr/bin/java ? 您可以获得的 javac 链接的实际路径

which javac

并使用 readlink 读取真实路径。显然,如果安装了 JDK(不是 JRE),它就可以工作。关于更新,大多数 Linux 发行版都会创建一个符号链接,例如 /usr/lib/jvm,它被设置为正确的目录并在新版本的情况下更新。对我来说更好的解决方案是将这条路径放在你的 bashrc 中。

是的,如果您不需要 JAVA_HOME 对其他操作系统用户可见,那么 bashrc 通常就足够了。

于 2017-02-01T17:08:31.617 回答