我安装了java并设置了环境路径,当我执行echo $JAVA_HOME
时,我得到以下输出:
/usr/lib/jvm/java-7-oracle/jre/bin/java
我还安装了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
但是当我执行mvn --version
时,我收到警告:
Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/lib/jvm/java-7-oracle/jre/bin/java/bin/java
无法找出最终重复的原因/bin/java/bin/java
答案 0 :(得分:75)
假设您使用bash shell并使用Oracle安装程序安装了Java,您可以将以下内容添加到.bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/jre/bin:$PATH
这将选择Oracle安装程序定义的正确JAVA_HOME
,并将其$PATH
设置为bash
,确保找到它。
此外,更新Java时无需稍后更改。
修改强>
根据评论:
重启后使其持久化
只需在shell配置文件中添加这些行。 (假设它是.bashrc
)
例如:.bash_profile
,.profile
或JAVA_HOME
(适用于ubuntu)
使用自定义Java安装
将$()
设置为不带JAVA_HOME=/opt/java/openjdk
的自定义Java安装路径的根文件夹。
例如:{{1}}
答案 1 :(得分:19)
JAVA_HOME应为/usr/lib/jvm/java-7-oracle/jre/
。
答案 2 :(得分:14)
我们打开终端并查找java的位置:
manuel@zonademanel:~ → whereis java
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
lrwxrwxrwx 1 root root 22 2015年9月19日/ usr / bin / java - > 的/ etc /替代/ JAVA
manuel@zonademanel:~ → ls -lah /etc/alternatives/java
lrwxrwxrwx 1 root root 39 dic 7 11:52 / etc / alternatives / java - > / usr / lib中/ JVM / JAVA -8- ORACLE / JRE / bin中/ JAVA
我使用以下值修改了 / etc / environment 文件
PATH =#&34;在/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏:在/ usr /本地/游戏:<强> / usr / lib中/ JVM / JAVA -8- ORACLE / JRE / bin中强>&#34; JAVA_HOME =&#34;的 / usr / lib中/ JVM / JAVA -8- ORACLE / JRE 强>&#34;
如果我不想重新登录,我可以使用以下命令重新加载更改:
source /etc/environment
正确运行 mvn -version
manuel@zonademanel:~ → mvn -version
Apache Maven 3.0.5
Maven主页:/ usr / share / maven
Java版本:1.8.0_77,供应商:Oracle Corporation
Java home:/ usr / lib / jvm / java-8-oracle / jre
默认语言环境:es_MX,平台编码:UTF-8
操作系统名称:&#34; linux&#34;,版本:&#34; 3.16.0-70-generic&#34;,arch:&#34; amd64&#34;,family:&#34; unix&#34;
答案 3 :(得分:9)
$JAVA_HOME
应该是安装java的目录,而不是其中的一个部分:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
答案 4 :(得分:5)
由于几个原因,您可能会收到此错误。要快速解决此问题,请按照以下步骤进行操作
首先找到java的位置。要获取已安装的Java平台的列表,请从终端运行以下命令:
$ sudo update-alternatives --config java
现在设置JAVA_HOME和PATH,
$ export JAVA_HOME=<java_home>
$ export PATH=$JAVA_HOME/jre/bin:$PATH
创建符号链接
$ sudo ln -s <java_home>/jre <java_symlink_path>
当我们以您的案例为例时:
$ sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/java-7-oracle/jre/bin/java
上面的命令将创建系统在您的问题中尝试查找的符号链接位置。
最后做
$ mvn --version
答案 5 :(得分:2)
在我的情况下,你必须占用安装java的整个目录:
export JAVA_HOME=/usr/java/jdk1.8.0_31
答案 6 :(得分:2)
设置为导出JAVA_HOME = / usr / java / jdk1.8.0_31。并使用sudo运行它将执行..
答案 7 :(得分:2)
首先,在开发模式中,您应该使用JDK而不是JRE。 其次,JAVA_HOME是安装Java的地方,其他所有框架都会搜索他们需要的东西(JRE,javac,...)
所以如果你设置
JAVA_HOME = / usr / lib中/ JVM / JAVA -7- ORACLE / JRE / bin中/ JAVA
当你运行“mvn”命令时,Maven将尝试通过添加/ bin / java来访问java,认为JAVA_HOME位于Java安装的根目录中。
但设置
JAVA_HOME = / usr / lib中/ JVM / JAVA -7- ORACLE /
Maven将访问add bin / java然后它将正常工作。
答案 8 :(得分:2)
此解决方案对我有用...
只需输入
终端中的export PATH=$JAVA_HOME/jre/bin:$PATH
然后运行mvn -version
它会显示相同的错误,但带有这样的日志
which: no javac in (/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin)
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30)
Maven home: /opt/apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
现在复制Java home
路径,即我的情况下为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
。
现在输入
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
,错误得到解决。 注意:将您自己的路径粘贴到您的计算机上,该路径会在导出JAVA_HOME的mvn日志中显示。
答案 9 :(得分:1)
It happens because of the reason mentioned below :
If you see the mvn script: The code fails here ---
Steps for debugging and fixing:
Step 1: Open the mvn script /Users/Username/apache-maven-3.0.5/bin/mvn (Open with the less command like: less /Users/Username/apache-maven-3.0.5/bin/mvn)
Step 2: Find out the below code in the script:
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly."
echo " We cannot execute $JAVACMD"
exit 1
fi
Step3: It is happening because JAVACMD
variable was not set. So it displays the error.
Note: To Fix it
export JAVACMD=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/
Key: If you want it to be permanent open emacs .profile
post the commands and press Ctrl-x Ctrl-c ( save-buffers-kill-terminal ).
答案 10 :(得分:1)
如果您使用的是mac-OS,则export JAVA_HOME=/usr/libexec/java_home
需要更改为export JAVA_HOME=$(/usr/libexec/java_home)
。
执行此操作的步骤:
$ vim .bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
$ source .bash_profile
其中/usr/libexec/java_home
是你的jvm的路径
答案 11 :(得分:1)
使用这两个命令(对于Java 8):
sudo update-java-alternatives --set java-8-oracle
java -XshowSettings 2>&1 | grep -e 'java.home' | awk '{print "JAVA_HOME="$3}' | sed "s/\/jre//g" >> /etc/environment
答案 12 :(得分:0)
就我而言,问题出在vscode中。
我使用Windows并在计算机上安装了Ubuntu,因此vscode终端使用Ubuntu。我只是转到settings.json并再次更改为cmd.exe
答案 13 :(得分:0)
我遇到了同样的问题,但是打开了jdk,这里没有答案。问题在于,尝试运行Java命令时,mvn脚本在JAVA主页的末尾附加了/ bin / java。
对我来说,解决方案是手动编辑/usr/local/apache-maven/apache-maven-3.3.9/bin/mvn脚本(您自己的脚本安装可能有所不同;只需运行哪个mvn)并更改< / p>
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
收件人
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME"
fi
else
JAVACMD="`which java`"
fi
fi