错误:未正确定义JAVA_HOME正在执行maven

use*_*896 54 java java-home maven

我安装了java并设置了环境路径,当我执行时,echo $JAVA_HOME我得到以下输出:

/usr/lib/jvm/java-7-oracle/jre/bin/java
Run Code Online (Sandbox Code Playgroud)

我还安装apache-maven并更改了environment文件,现在它看起来像这样:

JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre/bin/java"
M2_HOME=/usr/local/apache-maven/apache-maven-3.0.5
M2=$M2_HOME/bin
MAVEN_OPTS="-Xms256m -Xmx512m"
PATH=$M2:$PATH
Run Code Online (Sandbox Code Playgroud)

但是当我执行时,mvn --version我得到一个警告:

Error: JAVA_HOME is not defined correctly.
  We cannot execute /usr/lib/jvm/java-7-oracle/jre/bin/java/bin/java
Run Code Online (Sandbox Code Playgroud)

无法找出最终重复的原因 /bin/java/bin/java

rbe*_*nto 80

假设您使用bash shell并使用Oracle安装程序安装了Java,则可以将以下内容添加到您的 .bash_profile

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/jre/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

这将选择JAVA_HOMEOracle安装程序定义的正确,并在$PATH确保找到它时首先设置它.

此外,更新Java时无需稍后更改.

编辑

根据评论:

重启后使其持久化

只需在shell配置文件中添加这些行.(假设是bash)

例如:.bashrc,.bash_profile.profile(为Ubuntu)

使用自定义Java安装

设置JAVA_HOME为自定义Java安装路径的根文件夹,而不是$().

例如: JAVA_HOME=/opt/java/openjdk

  • 值得注意的是,对于ubuntu,你应该根据http://askubuntu.com/questions/824829/creating-and-configuring-bash-profile使用.profile而不是.bash_profile. (2认同)

tal*_*lex 19

JAVA_HOME应该是/usr/lib/jvm/java-7-oracle/jre/.

  • 是的,你需要从你的路径中删除尾随的"/ bin/java".含义:JAVA_HOME ="/ usr/lib/jvm/java-7-oracle/jre /" (3认同)

小智 14

我们打开一个终端并查找java的位置:

manuel@zonademanel:~ ? whereis java
Run Code Online (Sandbox Code Playgroud)

java:/ usr/bin/java/etc/java/usr/bin/X11/java/usr/share/java /usr/share/man/man1/java.1.gz

我们正在寻找的是/ usr/bin/java在命令行上继续查找绝对路径,因为这只是一个符号链接.

manuel@zonademanel:~ ? ls -lah /usr/bin/java
Run Code Online (Sandbox Code Playgroud)

lrwxrwxrwx 1 root root 22 2015年9月/ usr/bin/java - >/etc/alternatives/java

manuel@zonademanel:~ ? ls -lah /etc/alternatives/java
Run Code Online (Sandbox Code Playgroud)

lrwxrwxrwx 1 root root 39 dic 7 11:52/etc/alternatives/java - >/usr/lib/jvm/java-8-oracle/jre/bin/java

我使用以下值修改了/ etc/environment文件

PATH ="/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/games:/ usr/local/games:/ usr/lib/JVM/JAVA -8-预言/ JRE/bin中 "JAVA_HOME =" / usr/lib中/ JVM/JAVA -8- ORACLE/JRE "

如果我不想重新登录,我可以使用以下命令重新加载更改:

source /etc/environment 
Run Code Online (Sandbox Code Playgroud)

并正确运行mvn -version

manuel@zonademanel:~ ? mvn -version
Run Code Online (Sandbox Code Playgroud)

Apache Maven 3.0.5
Maven主页:/ usr/share/maven
Java版本:1.8.0_77,供应商:Oracle Corporation
Java主页:/ usr/lib/jvm/java-8-oracle/jre
默认语言环境:es_MX,平台编码: UTF-8
操作系统名称:"linux",版本:"3.16.0-70-generic",arch:"amd64",family:"unix"


Mur*_*nik 9

$JAVA_HOME 应该是安装java的目录,而不是其中的一个部分:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle
Run Code Online (Sandbox Code Playgroud)


小智 6

您应该将其设置为导出JAVA_HOME=/usr/java/jdk1.8.0_31并运行,sudo它将执行如下所示。

例子

sudo mvn -v
Run Code Online (Sandbox Code Playgroud)

输出

阿帕奇Maven 3.6.0
Maven 主目录:/usr/share/maven
Java版本:11.0.10,供应商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64
默认区域设置:en_US,平台编码:UTF-8
操作系统名称:“linux”,版本:“5.4.0-70-generic”,架构:“amd64”,系列:“unix”

  • `sudo` 解决了我的问题。我的“JAVA_HOME”是正确的,但我看到了同样的错误。 (2认同)

tk_*_*tk_ 5

由于几个原因,您可能会收到此错误.要快速解决此问题,请按以下步骤操作,

首先找到java的位置.要获取已安装的Java平台的列表,请从终端运行以下命令:

$ sudo update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)

现在设置JAVA_HOME和PATH,

$ export JAVA_HOME=<java_home>

$ export PATH=$JAVA_HOME/jre/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

创建符号链接

$ sudo ln -s <java_home>/jre <java_symlink_path>
Run Code Online (Sandbox Code Playgroud)

当我们以你的情况为例:

$ sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/java-7-oracle/jre/bin/java
Run Code Online (Sandbox Code Playgroud)

上面的命令将创建系统在您的问题中尝试查找的符号链接位置.

最后做了

$ mvn --version
Run Code Online (Sandbox Code Playgroud)