【问题标题】:Set PATH and JAVA_HOME in Fedora 25在 Fedora 25 中设置 PATH 和 JAVA_HOME
【发布时间】:2017-02-01 16:22:25
【问题描述】:

请原谅之前似乎回答过的问题,但如果我阅读 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

【问题讨论】:

  • 如果您从 fedora 存储库安装了 openjdk,则不必设置这些变量,一切都应该开箱即用。

标签: java maven fedora-25


【解决方案1】:

我建议创建一个别名命令,修改 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. 执行别名命令

【讨论】:

    【解决方案2】:

    设置 JAVA_HOME :

    echo "JAVA_HOME=/etc/alternatives/jre" >> ~/.profile
    source ~/.profile
    echo $JAVA_HOME
    

    【讨论】:

    • 使用alternatives管理版本是强烈推荐的方法,所以这个答案应该是首选答案,除非你有特定的理由使用alternatives。链接/usr/bin/java 无论如何都是由alternatives 管理的,所以这只是一个更复杂的方式来完成这个答案的工作
    【解决方案3】:

    我将以下内容放在 ~/.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/ 文件夹中,并让自己的帐户访问它(sudo chown -R myself.myself /tools/ 其中myself 是我的用户 ID)。那就是我安装 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。

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

    【讨论】:

      【解决方案4】:

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

      JDK 位置:

      /usr/java/latest/
      

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

      sudo alternatives --config java
      

      【讨论】:

        【解决方案5】:

        到目前为止,这让 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。

        【讨论】:

          【解决方案6】:

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

          获得的 javac 链接的实际路径
          which javac
          

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

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

            • 当我尝试你的表达式然后打开一个 shell 在提供提示“tr: when not truncating set1, string2 must be non-empty”之前打印出来
            • 我完全忘记了,我改变了命令,它现在应该可以工作了:)
            猜你喜欢
            • 2014-07-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-19
            • 1970-01-01
            • 2019-01-22
            • 2012-12-16
            • 2020-08-01
            相关资源
            最近更新 更多