【问题标题】:How to correct JAVA_HOME which should point to a JDK not a JRE folder? [duplicate]如何更正应该指向 JDK 而不是 JRE 文件夹的 JAVA_HOME? [复制]
【发布时间】:2014-06-30 10:28:07
【问题描述】:

我正在尝试使用 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
  • 另外,您可能还想将导出行添加到 catalina.sh 文件中
  • 脚本是作为当前用户还是其他用户(root、tomcat 等)运行?
  • @Humdinger - 是的,我已经重新启动了服务器并回显了 $JAVA_HOME。它随心所欲地回响,但它仍然不喜欢它。

标签: java debugging jvm java-home catalina


【解决方案1】:

在 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 选项一起使用时,预期目标是手动设置与命令链接的可执行文件(例如,参见here)。出于我们的目的,我们可以改用--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

【讨论】:

    【解决方案2】:

    方法 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
    

    希望对你有帮助:)

    【讨论】:

    • 感谢 cmets!不幸的是,我无法控制 catalina.sh 或该文件夹中的任何内容。它全部构建在目标目录中,当我对项目进行清理时会丢失......
    • @MrA 不确定您所说的迷路是什么意思。你的意思是你的 tomcat 配置丢失了?
    • 我的意思是,带有 catalina.sh 的文件夹被删除并重建。它在目标目录中。所以,如果我把东西放在那里,它就会消失......
    • 目标只是从源复制而来。因此,无论您的来源位于何处,您都需要进行更改。通常在tomcat设置文件夹中
    • @Humdinger - 你猜它位于项目的某个地方还是服务器文件空间的某个地方?
    猜你喜欢
    • 2017-09-15
    • 2019-04-19
    • 2021-09-15
    • 2019-02-27
    • 2018-11-10
    • 2013-07-10
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多