近日接到一个需求,将JDK和tomcat以及一个web项目打包成安装文件的形式,要求在安装完毕后以windows服务的方式启动tomcat并将tomcat设置为开机自启动。
下面主要记述在制作过程中遇到的问题和解决方法。
工具及环境:
JDK5,、Tomcat6解压缩版、Win7、WinRAR4.11
制作思路:
通过Tomcat的环境变量设置与JDK相关联,将Tomcat服务注册为windows服务并设置为开机自启动状态,最后将加入了web项目的整个目录使用WinRAR打包成自解压文件并设置解压后自动启动文件,在桌面上提供启动Tomcat服务的快捷方式。
过程:
所使用的Tomcat目录F:\CAS.
首先将JDK目录复制到“F:\CAS\bin\”文件夹下,我给JDK文件夹的名字为“F:\CAS\bin\java”。经过查阅网上资料,首先对"F:\CAS\bin\"文件夹下的setclasspath.bat 文件进行了修改,
修改结果为,在
rem ---------------------------------------------------------------------------
rem Set CLASSPATH and Java options
rem
rem $Id: setclasspath.bat 908749 2010-02-10 23:26:42Z markt $
rem ---------------------------------------------------------------------------
下面添加:
Set CLASSPATH=.
Set JAVA_HOME=%cd%\java
Set PATH=%cd%\java\bin
经过该设置,并进行测试,startup.bat可以启动Tomcat,但是如果执行service.bat install命令会出现JAVA_HOME 变量为空的现象,虽然服务可以安装成功,但无法正常启动,报错为:
windows 不能在 本地计算机 启动 Apache2。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 0
查阅网上资料发现大多所说的是以下几种情况:
1.安装目录中有中文存在
2.将jre的bin文件夹的的某文件拷贝到system32或者tomcat的bin文件夹下
3.8080端口号被占用,修改端口号
经过测试上述几种方法均不能解决问题。纠结了很久以后,发现我当时所用的JDK为6.0,虽然无法确定是否由此引起的问题,还是讲JDK更换为了JDK5。
更换以后,startup.bat仍可以正常启动,但Tomcat的windows服务仍然无法启动,由于此前我已将系统环境变量全部删除,改用命令设置的方式,于是重新配置了JAVA_HOME,配置完成后Tomcat服务即可正常启动。但要还没有达到要求的安装完成即可启动的效果,于是重新删除了配置的环境变量。虽然setclasspath.bat中设置了JAVA_HOME,但似乎并未对服务起作用,在安装时显示的该变量仍然为空,先后在Service.bat、Catalina.bat中进行JAVA_HOME的设置,都没有效果。于是在安装服务前进行了设置,并对所用的Service.bat的PR_JVM进行了更改,不再使用auto,改为指定JAVA_HOME对应的JVM,新建的批处理文件runserver.bat如下:
Set JAVA_HOME=%cd%\java
service.bat install Tomcat6CAS
此时可以正常的安装Tomcat的服务并启动。将Tomcat设置为开机自启动,需要在Service.bat中加上sc config %SERVICE_NAME% start= auto,
加载服务安装完毕后即可,我加在了倒数第三行echo The service '%SERVICE_NAME%' has been installed.之上。
至此整个tomcat的配置就算完成了。
在打包为自解压格式的文件中还有几个问题要注意:
WinRAR的默认根目录为解压目录,所以原来的runserver.bat如果直接作为解压后的启动文件会出错,在设置时,我新建了一个runserverrar.bat文件,针对解压路径对JAVA_HOME做了更改,该文件只能在解压结束由WinRAR调用才能正确启动,内容如下:
Set CATALINA_HOME=%cd%\CAS
Set CATALINA_BASE=%cd%\CAS
Set JAVA_HOME=%cd%\CAS\bin\java
call %cd%\CAS\bin\service.bat install Tomcat6CAS
net start Tomcat6CAS
重新设置了CATALINA_HOME,CATALINA_BASE 和JAVA_HOME三个环境变量供WinRAR启动runserverrar.bat调用,以解压后的路径安装Tomcat并使用call命令等待服务安装完毕,然后启动服务。如果不适用call命令则,马上会执行net start Tomcat6CAS这一行,由于此时Tomcat尚未安装完毕,显然不能成功启动,也就达不到安装后自动运行服务的效果。
在创建启动服务的快捷方式时,应当注意使用的图标为.ico 后缀的图片,由于不了解这些,也费了些时间才成功设置了快捷方式的图标。
注:由于工作两年来一直在做android,接了这个任务费了不少力气,都已经不记得Tomcat的各项配置,记录下来,也许以后会有用