文档章节

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

桃核儿
 桃核儿
发布于 2017/08/21 23:51
字数 1223
阅读 20
收藏 0

今天因为公司有项目要开发,但作为是刚刚入手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的位置,大功搞成。

© 著作权归作者所有

桃核儿
粉丝 1
博文 16
码字总数 12740
作品 0
广州
程序员
私信 提问
ubuntu常用配置整理

Ubuntu系统进行网络配置有的时候用图形界面不起作用,这种情况下可以直接修改某些启动脚本或配置文件 Ubuntu系统进行网络配置涉及到几个配置文件1./etc/network/interfaces 2./etc/resolv.c...

miaojiangmin
2016/10/30
7
0
毕业设计记录(一)配置web开发环境(java)

本打算跟着总结,写好日志。但是真正忙的时候没有时间总结,有空时又爱玩,只能抽空总结。今天是毕业设计做了一小部分,不知道下一阶段咋整了,所以总结。 首先毕业设计做的事web应用,用的j...

jiler
2014/05/08
0
0
OSGI开发的一点心得

最近用OSGI+嵌入jetty做了一个IDE的后台管理,OSGI真是个好东西,即插即用。 现总结一下初学时候遇到的问题。 1、启动WEB服务 需要加载6个插件(org.eclipse.osgi是默认一定要加载的插件,不...

anrainie
2012/03/07
0
0
linux C/C++开发环境搭建指南

Eclipse IDE for C/C++ developers 就是安装了CDT的Eclipse IDE了。 一、安装基本开发环境 本人想学习一下Linux下的C,C++程序开发,这几天一直在研究Linux下的C语言编译环境的建立,因为新...

突然帅了
2013/11/20
0
0
Eclipse中JSP生成的class文件去了哪里?

大家都知道,JSP在请求的时候,会先转化成Servlet(其实就是个java类),然后生成class文件,再提供服务。 那么生成的java、class文件在哪呢?Eclipse中根本找不到呀!   首先应该了解的是...

青夜之衫
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

在Javascript中Eval函数的使用

【eval()函数】 JavaScript有许多小窍门来使编程更加容易。 其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。 举个小例子: var the_unevaled_ans...

花漾年华
4分钟前
0
0
[日更-2019.5.22、23] Android 系统的分区和文件系统(二)--Android 文件系统中的文件

声明 Android系统中有很多分区,每个分区内的文件系统一般都不同的,使用ADB进入系统/目录下可发现挂载这很多的目录,不同的目录中可来自不同的分区及文件系统; 那么,就来分下这些目录里面...

小馬佩德罗
8分钟前
0
0
数组算法

/*数组的相关的算法操作:1、在数组中找最大值/最小值*/class Test11_FindMax{public static void main(String[] args){int[] array = {4,2,6,8,1};//在数组中找最大...

architect刘源源
56分钟前
2
0
okhttp3 以上版本在安卓9.0无法请求数据的解决方案

应用官方的说明:在 Android 6.0 中,我们取消了对 Apache HTTP 客户端的支持。 从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。且Android P 限制了明文流量...

chenhongjiang
今天
11
0
简单示例:NodeJs连接mysql数据库

开篇引用网上的说法: 简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于...

李朝强
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部