我已经进入我的服务器(Ubuntu 12.04),无论我为JAVA_HOME和JRE_HOME设置什么,tomcat6都不想开始:
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ echo $JAVA_HOME
/usr/lib/jvm/jdk-oracle.1.6.0_33/bin
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ echo $JRE_HOME
/usr/lib/jvm/jdk-oracle.1.6.0_33/jre
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ sudo service tomcat6 start
* no JDK found - please set JAVA_HOME
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ export JAVA_HOME=/usr/lib/jvm/jdk-oracle.1.6.0_33
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ sudo service tomcat6 start
* no JDK found - please set JAVA_HOME
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ ls $JAVA_HOME
bin db jre LICENSE README.html register_ja.html src.zip
COPYRIGHT include lib man register.html register_zh_CN.html THIRDPARTYLICENSEREADME.txt
me@myserver:/usr/lib/jvm/jdk-oracle.1.6.0_33$ ls $JAVA_HOME/bin
appletviewer HtmlConverter java javap jdb jps jstat native2ascii rmic serialver wsgen
apt idlj javac javaws jhat jrunscript jstatd orbd rmid servertool wsimport
ControlPanel jar javadoc jconsole jinfo jsadebugd jvisualvm pack200 rmiregistry tnameserv xjc
extcheck jarsigner javah jcontrol jmap jstack keytool policytool schemagen unpack200
我正在查看tomcat6的init.d脚本,我发现了一些搜索openjdk的自定义逻辑。我不想使用openjdk,我特意安装了oracle!这是init.d脚本的一个snippit(我没有写过):
# this is a work-around until there is a suitable runtime replacement
# for dpkg-architecture for arch:all packages
# this function sets the variable OPENJDKS
find_openjdks()
{
for jvmdir in /usr/lib/jvm/java-7-openjdk-*
do
if [ -d "${jvmdir}" -a "${jvmdir}" != "/usr/lib/jvm/java-7-openjdk-common" ]
then
OPENJDKS=$jvmdir
fi
done
for jvmdir in /usr/lib/jvm/java-6-openjdk-*
do
if [ -d "${jvmdir}" -a "${jvmdir}" != "/usr/lib/jvm/java-6-openjdk-common" ]
then
OPENJDKS="${OPENJDKS} ${jvmdir}"
fi
done
}
# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
OPENJDKS=""
find_openjdks
JDK_DIRS="/usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
# Look for the right JVM to use
for jdir in $JDK_DIRS; do
if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
JAVA_HOME="$jdir"
fi
done
export JAVA_HOME
我不得不从/ usr / lib / jvm中删除openjdk,因为愚蠢的tomcat一直在找它并使用它,即使我的JAVA_HOME变量设置为使用oracle的java。
请帮忙吗?我不知道如何解决这个问题。我使用maven和maven的方式与我设置JAVA_HOME变量的方式完全吻合。
修改
我打开了init.d tomcat脚本并更改了这一行:
JDK_DIRS="/usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
到此:
JDK_DIRS="/usr/lib/jvm/jdk-oracle.1.6.0_33 /usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
(我刚刚将我的路径/usr/lib/jvm/jdk-oracle.1.6.0_33
添加到字符串中)
突然tomcat启动并运行我的oracle java。我想这很有效,但这不是最好的方法。
修改
StephenC:
me@myserver:/usr/lib/jvm$ sudo bash
root@myserver:/usr/lib/jvm# echo $JAVA_HOME
/usr/lib/jvm/jdk-oracle.1.6.0_33
答案 0 :(得分:4)
试试这个:
sudo bash
echo $JAVA_HOME
我怀疑问题是你的 $ JAVA_HOME环境变量没有通过sudo
传递给它正在运行的命令。 手动输入肯定意味着它不会!! (你的实验似乎暗示不然,但我怀疑其他东西让人感到困惑......)
我不确定最佳长期解决方案是什么,但替代方案包括:
IMO,在启动服务时依赖您的 $ JAVA_HOME环境变量是一个坏主意。您可能会忘记并错误地使用错误的JDK启动。保护自己。