Ubuntu 下安装tomcat和配置eclipse的遇到的问题的一点心得。

今天因为公司有项目要开发,但作为是刚刚入手Ubuntu的吃瓜群众,不得不重新配置一套开IDE。

首先大家来找找茬上图两张:

图一:(成功)

图二:(失败)

别看两次运行结果都是Tomcat started

http://localhost:8080,测试一下发现第二次是假启动 ,

千万别认为是你的浏览器坏了,不信我们来看看日志(logs/catalina.log):

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.apache.catalina.startup.Bootstrap.  Program will exit.

我们来翻译一下:不能够找到main class 但是事实上我们的项目里有下面这个jar包。

org.apache.catalina.startup.Bootstrap

这是为什么,请看上图两张图的结果上显示JRE_HOME这个属性的不同,一个配置了,一个未配置,区别来了;JRE是什么东西,Java run environment,正解。再来看我们的tomcat给的说明文件,下面这个文件其实很重要,有些小伙伴可能会忽略:RUNNING.txt 这个文件详细描述了tomcat运行需要的参数,配置,运行命令,等等。读一下真的会让你有个更加深入的理解,博主有空会翻译一份。

(3.2) Set JRE_HOME or JAVA_HOME (required)

These variables are used to specify location of a Java Runtime
Environment or of a Java Development Kit that is used to start Tomcat.

The JRE_HOME variable is used to specify location of a JRE. The JAVA_HOME
variable is used to specify location of a JDK.

Using JAVA_HOME provides access to certain additional startup options that
are not allowed when JRE_HOME is used.

If both JRE_HOME and JAVA_HOME are specified, JRE_HOME is used.

这段话的大致意思就是tomcat运行的时候需要jre,可以仅有一个jre环境,也可以有jdk环境,因为jdk里毕竟包含着jre嘛,当两者都配置的时候,优先使用jre_hone,那么问题来了tomcat在启动的时候在哪个位置配置了这两个环境变量呢,接着看文件

(4) Start Up Tomcat

(4.1) Tomcat can be started by executing one of the following commands:

  On Windows:

      %CATALINA_HOME%\bin\startup.bat

    or

      %CATALINA_HOME%\bin\catalina.bat start

  On *nix:

      $CATALINA_HOME/bin/startup.sh

    or

      $CATALINA_HOME/bin/catalina.sh start

这两个就有意思了,启动的时候的文件,首先我们来分析$CATALINA_HOME是什么东西,

(3.1) Set CATALINA_HOME (required) and CATALINA_BASE (optional)

The CATALINA_HOME environment variable should be set to the location of the
root directory of the "binary" distribution of Tomcat.

看这段文字:可以知道CATALINA_HOME是一个必须的环境变量,那么这个环境变量是怎么来的呢,再来看看startup.sh和catalina.sh这两个文件,发现catalina.sh这个文件很有意思了,里面全是一些配置的环境变量,甚至它文件的开头注释详细描述了,这些变量的作用,例如

#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.
#
#   JRE_HOME        Must point at your Java Runtime installation.
#                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
#                   are both set, JRE_HOME is used.

这两个词清楚的说明了这两个环境变量的重要性,至此我们可以知道,JRE_HOME这个变量必须有,而且可以配置在此文件下,再回过头来看CATALINA_HOME这个变量在哪里配置了,来看看startup.bat这个命令文件一看惊奇的发现:

rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
 
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

在这个文件中,首先判断CATALINA_HOME环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值。接着判断当前目录下是否存在bin\catalina.bat,如果文件不存在,将当前目录的父目录设为CATALINA_HOME的值。根据笔者机器上Tomcat安装目录的层次结构,最后CATALINA_HOME的值被设为Tomcat的安装目录。如果环境变量CATALINA_HOME已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命令。通过这段分析,我们了解到两个信息,一是Tomcat启动时,需要查找CATALINA_HOME这个环境变量,如果在Tomcat的bin目录下调用startup.bat,Tomcat会自动并正确设置CATALINA_HOME;二是执行startup.bat命令,实际上执行的是“catalina.bat start”命令。

所以得出结论:刚才的错误是由于没有加载jre_home引起的,而博主是在tomcat这个目录下执行的startup.sh所以默认目录为tomcat目录,而此目录下有catalina.bat,所有tomcat启动成功了,但是事实上是缺少一个jre环境的所以可以在catalina.sh文件下配置jre_home的位置,大功搞成。

转载于:https://my.oschina.net/Spider001/blog/1518342

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值