java 在 Fedora 25 中设置 PATH 和 JAVA_HOME

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41984664/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 06:16:59  来源:igfitidea点击:

Set PATH and JAVA_HOME in Fedora 25

javamavenfedora-25

提问by Max Wen

Please excuse what appears to be a question answered before, but if I read 10 different posts I find 20 different responses.

请原谅之前回答过的问题,但如果我阅读了 10 个不同的帖子,我会发现 20 个不同的回答。

I just installed Fedora 25. I am going to be learning Java development and need to set up my environment. I will be using openjdk and have installed java-1.8.0-openjdk-devel. I will also be using Maven.

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

Now I need to set my $PATHand $JAVA_HOMEvariables.

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

I tried the answer found here (Fedora OpenJDK Set JAVA_HOME)

我尝试了在这里找到的答案(Fedora OpenJDK Set JAVA_HOME

but after adding to my .bashrc

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

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

and then testing, I get what appears to me to be the wrong answer because I do not think there should be a /jre/ on the end

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

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

So can I please ask what I should set JAVA_HOME to so that I do not need to update it with every openjdk update?

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

After that I think PATH is just

在那之后,我认为 PATH 只是

export PATH=$JAVA_HOME/bin:$PATH

this seems like such a straightforward thing to do yet it seems to me there is much confusion. thx

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

PS also, is .bashrc even the correct place? because I see here (https://askubuntu.com/questions/175514/how-to-set-java-home-for-java) that /etc/environment would be more appropriate) thx

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

回答by Eder Armando Anillo Lora

I suggest create an alias command, modifying bashrc and set JAVA_HOMEinto bash_profile, this:

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

  1. Create command in the bashrc:

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

Save and execute: source ~/.bashrc

保存并执行: source ~/.bashrc

  1. Create generic JAVA_HOMEin bash_profile:

    export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
    PATH=$JAVA_HOME/bin:$PATH
    
  2. Execute the alias command

  1. JAVA_HOME在 bash_profile 中创建泛型:

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

回答by Nick

So far, this gets Android Studio running using the Fedora provided OpenJDK and respects the distribution provided materials without a bunch of otherwise unmanaged symlinking:

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

vim ~/.bash_profile

Add the following, or replace any existing examples that look similar to it:

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

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

The command basically asks for the physical path that the symlink /usr/bin/java points to (configured by alternatives in Fedora), and then says "take the first 6 fields given to you by splitting on the / character."

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

Note that your $PATH will already be set up correctly for use with the Fedora provided OpenJDK.

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

In practice, this ends up looking like:

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

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

This assumes you have at least one of the OpenJDK packages Fedora ships. 25 probably only shipped 1.8, 28 ships 1.8, 10.0.2, and 11.0.1. (if you're reading this and still using 25, it's probably time to upgrade.)

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

Install one of the java-*-openjdk-headless packages available to you (or one of the Oracle provided ones), and configure which one to use using:

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

 sudo alternatives --config java

The default on my Fedora 28 install was to use OpenJDK 1.8.

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

回答by Karima Rafes

Set JAVA_HOME :

设置 JAVA_HOME :

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

回答by MariuszS

OpenJDK bundled with Fedora dosen't work for me. For example IntelliJ can't use this version. In my opinion, best option is to install Oracle JDK RPM from Oracle.

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

JDK location:

JDK位置:

/usr/java/latest/

To manipilate JRE use command below:

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

sudo alternatives --config java

回答by Laurent-P

Maybe adding a trcould work? export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::" | tr -d "/jre/")?

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

Also, setting it in your env var will make the var independent from the sh your using. That's a great way to store It.

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

回答by GlenPeterson

I put the following in ~/.profile, not ~/.bashrc and I think it's the same on Fedora (I used CentOS at work and do the same):

我将以下内容放在 ~/.profile 中,而不是 ~/.bashrc 中,我认为它在 Fedora 上是相同的(我在工作中使用 CentOS 并执行相同的操作):

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

I have to either sign out or reboot after changing .profile.

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

On Ubuntu, java only changed from 7 to 8 a few years ago. I don't know why Fedora would want to put an exact version number on the java folder. You might complain?

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

If Java moves around too much for you on Fedora, use a symlink. The symlink takes affect right away, without logging out or rebooting. On my laptop, I encrypt my home folder, so for extra speed, I put most third party tools in a /tools/ folder and give myself account access to it (sudo chown -R myself.myself /tools/where myselfis my user ID). That's where I put my maven install. Tomcat uses a different directory name for each release, so I make a symlink like so:

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

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

Then in ~/.profile (CATALINA means TOMCAT in this example - don't ask me why):

然后在 ~/.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

When I upgrade tomcat:

当我升级 tomcat 时:

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

You can use the same technique to make a /usr/lib/jvm/latest-java. In fact, if you install Oracle Java (not necessarily recommended), it does exactly that, for this reason.

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

Yes, what you said about the path looks correct to me. I don't put java in my path, preferring to use $JDK_HOME, $JAVA_HOME, or just calling maven. Part of that is for security. Part of it is to feel like I always know which version of Java I'm using.

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

P.S. To me, the ln -ssyntax always looks as if the arguments are reversed. The actual folder name goes first, followed by your desired alias/link.

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

回答by Georgy Klochkov

Sadly I don't have Fedora available for me, so I can't investigate how Java is usually installed, but why you don't try to replace /usr/bin/java in your expression with something like /usr/bin/javac? The actual path to javac link you can get with

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

which javac

And read the real path with readlink. Obviously, it works if JDK is installed (not JRE). About updating, most of Linux distros create a symbolic link like /usr/lib/jvm which is set to the correct directory and update in case of new version. For me better solution it to put this path in your bashrc.

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

And yes, bashrc is usually enough if you don't need JAVA_HOME to be visible to other OS users.

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