有一个Web Application是在Tomcat6上构建的,要部署到Windows平台上,需要制作一个安装程序,以方便用户安装。

安装程序的主要目标是:用一个安装程序安装Java运行环境、Tomcat以及Web Application;修改Tomcat配置文件将应用加入网站,安装并启动Windows下的Tomcat服务。达到用一个安装程序在一台新装的Windows操作系统上部署整个Web应用的目的。安装程序使用NSIS建立,其安装脚本的关键点如下:

1Tomcat6Windows下服务的安装

从网上资料所见的有下面两个方法:

方法1

SetOutPath "$INSTDIR\tomcat\bin"
nsExec::Exec 
"cmd /C service install"
ExecWait 
"sc config Tomcat6 start= auto"

方法2

SetOutPath "$INSTDIR\tomcat\bin"
ExecWait 
"service.bat install"
ExecWait 
"sc config Tomcat6 start= auto"

在参考Tomcat网站上的手册后发现,使用tomcat6.exe执行程序也可以安装服务。

方法3

SetOutPath "$INSTDIR\tomcat\bin"
ExecWait 
'tomcat6 //IS//Tomcat6 --DisplayName="Apache Tomcat 6" \
--Install="$INSTDIR\Tomcat\bin\tomcat6.exe" --Jvm="$INSTDIR\jre6\bin\server\jvm.dll" \
--StartMode=jvm --StopMode=jvm --Startup=auto --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop \
--LogPath=$INSTDIR\Tomcat\logs --Classpath=$INSTDIR\Tomcat\bin\bootstrap.jar \
--JvmOptions=-Dcatalina.base=$INSTDIR\Tomcat;-Dcatalina.home=$INSTDIR\Tomcat;-Djava.endorsed.dirs=$INSTDIR\Tomcat\endorsed;-Djava.io.tmpdir=$INSTDIR\Tomcat\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=$INSTDIR\Tomcat\conf\logging.properties;'
 

其中方法3在安装程序运行时正确率更高些,而方法1和方法2有时会出现服务不能安装的情况。

2Tomcat6服务安装完毕后首次不能启动

Tomcat6服务安装完毕后如果不重新启动计算机而启动服务的话,将会出错,导致服务无法启动。检查log文件,发现是jvm.dll文件加载出错而导致java虚拟机无法启动,上网查资料,原来是新版本(1.6)的jvm.dll启动时要加载微软动态库msvcr71.dll,由于系统在当前的搜索路径中无法找到msvcr71.dll文件而出错,该文件随jdk6jre6提供,在相应的bin目录下,但即使安装程序将jre\bin目录加入path环境变量也无济于事,好像jvm.dll只认windows启动时的系统路径,而对本次windows系统启动后新加入的path变量不予承认(不知哪位高手能代为剖析其中原因)。解决的办法是将msvcr71.dll拷贝到jre\bin\server目录下和jvm.dll放在一起,或是拷贝到windows系统目录下都可以。

3Tomcat6不要求非要安装jdk,安装jre也可以,而Tomcat6以前版本则不行。

4、修改Tomcat配置文件server.xml

修改配置文件要涉及到xml文件的读写,需要使用NSISxml插件,可以在此下载

下面的实例脚本在server.xml中增加一个站点context,把我们自己的web应用加进去。

Function UpdateTomcatConfig
    ${xml::LoadFile} 
"$INSTDIR\tomcat\conf\server.xml" $0
    ${xml::CreateNode} 
"<Context></Context>" $R0 
    ${xml::GotoPath} 
"/Server/Service/Engine/Host" $0
    ${xml::InsertEndChild} 
"$R0" $0
    ${xml::GotoPath} 
"/Server/Service/Engine/Host/Context" $0
    ${xml::SetAttribute} 
"path" "/myapp" $0
    ${xml::SetAttribute} 
"reloadable" "true" $0
    ${xml::SetAttribute} 
"docBase" "$INSTDIR\myweb" $0
    ${xml::SetAttribute} 
"debug" "0" $0
    ${xml::SaveFile} 
"$INSTDIR\tomcat\conf\server.xml" $0
FunctionEnd

 

 

posted on 2010-02-12 15:55  Routop  阅读(1308)  评论(0编辑  收藏  举报