如何更正JAVA_HOME,应该指向JDK而不是JRE文件夹?

7

我正在尝试使用debug命令在Ubuntu Linux上运行Catalina。但是遇到了以下错误:

JAVA_HOME should point to a JDK in order to run in debug mode.
/bin/sh died with exit status 1

然而,我尝试在.bashrc文件中设置JAVA_HOME变量为以下所有内容:

export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-i386/"
export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-i386"
export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-i386/jre/bin"
export JAVA_HOME="/usr/lib/jvm/java-1.7.0-openjdk-i386/jre/bin/"

我有没有漏掉什么?


更改设置后,您是否重新启动了Bash?更改设置后,请尝试echo $JAVA_HOME并查看它给出的内容。为了重新加载设置,您可以尝试source ./.bashrc - Nick Humrich
另外,您可能还想将导出命令添加到您的catalina.sh文件中。 - Nick Humrich
脚本是以当前用户还是其他用户(root、tomcat等)的身份运行? - JohnFullard
@Humdinger - 是的,我已经重启了服务器并回显了$JAVA_HOME。它按预期回显,但仍然不喜欢它。 - Mr Mikkél
2个回答

7
在Debian/Ubuntu中运行:
$ sudo update-alternatives --config java
Path                                          
---------------------------------------------
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

查找与您的java命令关联的可执行文件。

注意:当使用update-alternatives命令并带有--config选项时,预期目标是手动设置与该命令相关联的可执行文件(例如,请参见此处)。对于我们的目的,可以使用--query选项代替。

JDK路径是这些路径中的前缀,即在jre之前的路径。例如,根据上面的输出,您可以在.bashrc文件中设置JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

因此在运行命令之前,您可以导出该路径或前缀,例如:

export
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 catalina.sh debug

0

方法1 将其添加到bashrc中将起作用。

方法2 但我认为更好的方法是将其添加到catalina.sh中。

JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386/jre/bin

方法三 甚至更加简洁的方式是创建一个 env_var.sh 文件(假设您已经在 catalina.h 相同的文件夹中创建了 env_var.sh),然后像这样在 catalina.sh 中使用 env_var.sh 文件

source ./env_var.sh

现在,您可以将自己的环境特定设置放入这个新文件中,并让catalina.sh保持不变。优点是您不会弄乱catalina.sh,也不会依赖于特定用户的bash配置文件。
env_var.sh的简单示例:
#!/bin/sh
JAVA_OPTS="$JAVA_OPTS -server"
JAVA_OPTS="$JAVA_OPTS -Xms2096m"
JAVA_OPTS="$JAVA_OPTS -Xmx4096m"
JAVA_OPTS="$JAVA_OPTS -XX:PermSize=128m"
JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=512m"

echo Using JAVA_OPTS settings $JAVA_OPTS

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=[some_port]"

echo Using CATALINA_OPTS settings $CATALINA_OPTS
JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386

希望能对你有所帮助 :)


非常感谢您的评论!不幸的是,我无法控制catalina.sh或该文件夹中的任何内容。所有内容都在目标目录中构建,并且在对项目进行清理时会丢失... - Mr Mikkél
@MrA 不确定您所说的“gets lost”是什么意思。您是指您的Tomcat配置丢失了吗? - vkg
我的意思是,带有catalina.sh的文件夹会被删除并重建。它位于目标目录中。因此,如果我把东西放在那里,它们将消失... - Mr Mikkél
通常在Tomcat设置文件夹中,您需要根据源文件所在位置进行更改。 - Nick Humrich
@Humdinger - 你认为这个位置是在项目中还是在服务器文件空间中呢? - Mr Mikkél
显示剩余2条评论

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