在Ubuntu上设置JAVA_HOME以指向Windows的JAVA_HOME

6

我尝试在Windows的CMD中运行Kafka,但它非常不稳定,会不断出现错误。然后我找到了这篇文章,建议安装Ubuntu并从那里运行Kafka。

我已经成功安装了Ubuntu。考虑到我已经将JAVA_HOME=C:\Program Files\Java\jdk1.8.0_231定义为其中一个环境变量,并且CMD识别此变量,但Ubuntu没有识别,我想知道如何让Ubuntu识别这一点,因为目前,当我键入java -version时,Ubuntu返回command not found

更新:请注意,我必须让Ubuntu的JAVA_HOME指向我在Windows系统中定义的环境变量JAVA_HOME。因为我的Java程序在eclipse中需要使用相同的JVM与Kafka进行通讯。

我已经在我的/etc/profile文件中添加了下面两行代码。 echo $JAVA_HOME返回正确的路径。但是,java -version返回在Ubuntu上安装的不同版本的Java,而不是/etc/profile中定义的版本。

export JAVA_HOME=mnt/c/Program\ Files/Java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH

1
我猜你是通过WSL安装的Ubuntu。你应该将其视为完全独立的操作系统,并通过apt安装openjdk。 - Federico klez Culloca
哦,我明白了。我不知道我必须将它视为完全不同的系统。在这种情况下,我的在Eclipse中运行的Java程序是否仍然能够与在Ubuntu上打开的Kafka服务器通信? - user1769197
1
顺便提一下,JAVA_HOME并不会告诉操作系统java可执行文件的位置,这就是PATH的作用。 - Federico klez Culloca
关于您最新的编辑,/etc/profile 中的更改将在您重新登录后生效,或者如果您执行 source /etc/profile 命令。您是否已经执行了其中任何一个操作? - Federico klez Culloca
当我输入 whereis java 时,它返回了3个路径。最后一个显示的是 mnt/c/Program Files/Java/jdk1.8.0_231。但是当我输入java时,它没有返回任何内容。 - user1769197
显示剩余3条评论
3个回答

1

当用户登录时,环境将从/etc/profile和$HOME/.bashrc文件中加载。有很多方法可以解决这个问题。您可以手动执行ex。

export JAVA_HOME=/opt/jdk1.8.0_66
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

或者在 /etc/profile 或 $HOME/.bashrc 中修复配置。
export JAVA_HOME=/opt/jdk1.8.0_66
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

1

您有2个问题。首先,您在环境变量的开头省略了 "/",因此除非您执行cd /,否则您的JAVA_HOME将无法工作,因为"mnt"不存在。

export JAVA_HOME=/mnt/c/Program\ Files/Java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH

其次,如果您使用的是Windows JDK,则可执行文件为java.exe
java.exe -version

在使用WSL时,请考虑到WSL1访问Windows操作系统磁盘更快 - 如果使用java.exe会很有帮助,而WSL2在访问Linux挂载驱动器时更快 - 并且您可能最好使用Linux二进制文件来代替Windows二进制文件,正如您在Kafka文章中所建议的那样。


我按照您上面的解决方案成功让Ubuntu找到了本地机器上的Java。然后我尝试运行bin/zookeeper-server-start.sh config/zookeeper.properties,但是它返回了/home/Me/kafka_2.13-2.8.1/bin/kafka-run-class.sh: line 330: /mnt/c/Program Files/Java/jdk1.8.0_231/bin/java: No such file or directory。我猜测这个错误出现是因为我正在运行Windows二进制文件,而Kafka shell脚本需要我使用Linux二进制文件。我是对的吗? - user1769197
根据帖子,看起来你需要Linux二进制文件而不是Windows的交叉编译。 - DuncG
在这种情况下,由于我的运行Kafka的Java程序在eclipse上运行,我必须让eclipse指向Linux的JDK。我说得对吗? - user1769197
@user1769197,为什么您认为需要在同一台虚拟机上运行kafka和您的项目?Kafka不是一个服务吗?您甚至可以在完全不同的物理机器上运行它。 - Federico klez Culloca

0

您可以编辑/etc/profile,追加内容。

export JAVA_HOME=C:\Program Files\Java\jdk1.8.0_231

export PATH=$JAVA_HOME/bin:$PATH

这不会起作用,因为C:驱动器未被识别,并且您已将JAVA_HOME设置为C:Program FilesJavajdk1.8.0_231,因为\在Linux上表示转义下一个字符。 - DuncG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接