Java Web应用产品安装程序制作方案

目录:
              4.1.1. Jsmooth简介
              4.1.2.工作原理
       4.2. IzPack
              4.2.1.IzPack简介
              4.2.2.工作原理
随着Java在应用产品开发中的广泛应用,基于Java的应用产品也就越来越多,那么如何为基于Java的应用产品制作安装程序的需求就产生了。以前人们一般都是使用InstallShield与InstallAnyWhere进行产品安装程序的制作,这是两个功能非常强大、易用的安装盘制作工具,尤其是InstallAnyWhere,它还支持Java应用产品安装制作,例如:大名鼎鼎的Jbuilder安装程序就是由它制作的。
本文并不准备对这些商业的安装制作工具进行讨论,本文将就如何利用开源的安装制作工具来进行Java Web应用产品程序制作进行一些探讨。
目前用于支持Java应用安装程序制作的开源工具非常丰富,本人将要本人在研究过程中所遇到的罗列一二以供参考:
Packlet 是一个简单的 Java 安装制作工具。它将 Java Application 打包成一个可以发布的类似于 zip tgz 的压缩文件中。这个压缩文件被简为 packlet ,它可以在安装有 Java 2 Runtime Environment 的操作系统上执行 . 通过执行 packlet 将会给用户提供一个图形化的安装配置界面并解压应用。
IzPack 是一个用于 Java 平台的安装程序生成器。它用于产生一个轻量级、能运行于所有安装了 JVM 的任何的操作系统的安装程序。生成的安装程序可以通过双击或在 Command Line 通过 java –jar install.jar 命令进行启动,安装程序运行的方式具体将看操作系统的支持方式。 IzPack 的主要好处就是能够生成运行于任意操作系统的安装程序。
Jsmooth 可以将 Java 可执行应用 Wrapper window 可执行 Exe 程序。通过 Jsmooth 生成的 Exe 程序会自动按制作时定义的顺序寻找合适的 JVM ,如果能不查找到 JVM ,安装程序会提示用户并能根据定义好的 URL 启动 Web Browser 让用户下载 JVM. 注意: Jsmooth 并不是纯 Java 应用。
VAInsall 是一个用 Java 写的多平台安装程序工具。它是基于 GNU GPL2.0 许可。通过一个简单的配置文件,它允许安装程序打包工具由不同的目录下收集程序包,这与一般情况下安装程序制作工具只能由一个根目录开始相比更为灵活。由 VAInstall 生成的安装程序允许先择不同的安装模式 (graphic,text ansi)
用于将 Java Application 安装成为 Window NT Service. 同时与之附带的 scripts 能够很容易将 Java Application 安装成为 UNIX 的后台进程。
Lift Off Java Installer 的最大特色就是:自解压 class 文件,对目标系统要求低以及跨平台性。
一个小巧、简单、纯 Java 实现的安装程序制作工作。
Lauch4J 也是一个 Java 应用 Window Exe 封装工具。通过 Lauch4J ,可以提供 splash screen, 图标,自动查询 JRE 或内置 JRE 等功能,同时还支持启动失败反馈以及命令行参数。
AntInstaller 是一个安装程序框架,它利用一个简单的 XML 定义安装界面,并以 Ant 执行安装过程。基于 AntInstaller 的安装程序可以打包成自解压 jar 通过 command line 执行可 Swing GUI 来执行。
Antigen---- Ant Installer Generator 。它主要的目的就是根据 Ant 脚本创建图形化安装程序。
FreeInstaller 是一个开源项目,完全用 Java 编写。它将应用程序打包成一个自解压的 Java 应用。通过 FreeInstaller 可以将 Java 或非 Java 的应用安装到 UNIX,LINUX 以及 window NT 系统中。
一个简单的 Java 安装程序制作工具。整个制作过程是通过脚本完成的,最终生成一个可以通过双击方式执行的 jar 文件。
通过对如上各产品的初步探索,本人最终选择了利用izpack + jsmooth作为Java Web应用产品的安装程序制作方案。选择这两种工具并不代表其它开源工具不好,只是本人自已结合自已项目的需求(本人负责公司一企业应用开发平台的研发工作)及本人的偏好作出的选择。
由于本人所在公司为商业公司,所以本文描述的方案并不是企业应用开发系统平台的实现模式,本文只是提供一个解决办法,关于如何与自已的框架或平台进行有效的整合,请读者自行考虑。
  • 你需要安装J2SDK1.4.1+版本;关于J2SDK请由Sun公司下载;
  • 你需要安装Ant1.6.2版本,理论上其它版本也行,只是本人用的是1.6.2;
  • 请下载并安装izpack;设定定装到IZPACK_HOME
  • 请下载并安装jsmooth;设定安装到JSMOOTH_HOME
为了便于理解,你需要对Java进行应用的开发有一定的基础,本例将以Web应用的安装程序制作为背景进行相关介绍,所以需要你对Web 应用开发以及其发布方式有一定的基础;另外,本方案将会以Ant作为应用build的工具,所以你需要有一定的Ant技术;对于如上相关知识本部分不准备介绍。下面本部分将主要对izpack及jsmooth进行简单的介绍。
4.1.1 Jsmooth 简介:
Jsmooth,一个Java可执行应用封装器(Wrapper),即将Java可执行应用程序(即可执行jar)封装为Window可执行文件------exe文件的工具。
通过Jsmooth将可执行jar封装为Exe文件,使得用户执行Java应用就如同执行一般的Window应用程序一样,重用用户经验。
Jsmooth对jar进行封装时可以设定classpath,JVM参数,命令行参数,JVM版本及位置,这样用户在执行exe时不用关心JVM,Classpath等问题,这样就简化了Java应用执行。
4.1.2 工作原理:
通过Jsmooth生成的Window Exe文件通常定义为“Jsmooth Application”;
要想生成Jsmooth Application,我们需要一个JsmoothGen 项目文件-----.jsmooth文件,后面我们将其称为“.jsmooth文件”;.jsmooth文件实际上是一个xml文件,用于描述/定义Jsmooth Application的相关属性,例如:classpath, JVM,Java main方法类,以及其它与Java应用运行相关的各种设定等;通常你可以通过Jsmooth提供的JsmoothGen.exe--------Windows Project Editor来创建和编辑这个文件,这个Editor如下图所示:
(图-1)Widnow Project Editor
(图-2)Widnow Project Editor
(图-3)Widnow Project Editor
在.jsmooth文件生成之后,就可以通过如下方式生成目标Jsmooth Application,即Exe文件:
(1)。Window Project Editor:
       你可以直接在如上图所示的编辑器通过工具条来生成:Project àCreate Exe。
(2)。Command Line:
       你也可以进入。jsmooth文件所以目录,通过如下命令来生成目标Exe文件:
………> %jsmooth_home%/jsmoothcmd.exe yourproject.jsmooth
(3)。通过Ant任务调用生成目标Exe:
       首先你需要在你的build文件中加入jsmooth Ant 任务定义:
      
<taskdef name="jsmoothgen"
classname="net.charabia.jsmoothgen.ant.JSmoothGen"
classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
       然后,通过jsmoothgen任务来执行生成Exe的工作:
      
       <jsmoothgen project=”path/to/yourproject.jsmooth”
           skeletonroot=”${jsmooth_home}/skeletons”/>
      
所以通过Jsmooth我们可以很容易将Java Application制作Windows Exe应用。
关于Jsmooth的详细介绍请参考 http://jsmooth.sourceforge.net
  • izpack是基于Apache Software License 2.0许可的开源项目;
  • izpack是纯Java,对部分特性有针对不同平台版本的Library。例如:快捷键的创建。
  • izpack是一个用于解决安装程序制作的Builder工具;
  • 通过izpack制作的安装程序可以运行于不同的操作系统,Windows, Linux, Unix等,只要安装了JDK1.4以及其后版本即可;
  • izpack优秀的模块化设计可以允许你定制安装程序外观、安装过程等;同时允许你通过其提供API调整izpack安装过程。
  • izpack的主要功能包括(但不限于):
·         XML based installation files
·         easy internationalization using XML files (10 translations are already available)
·         Ant integration, command-line compiler
·         easy customization with the panels and a rich API (even an XML parser is included !)
·         powerful variable substitution system that you can use to customize scripts and more generally any text-based file
·         different kinds of installers (standard, web-based, ...)
·         launching of external executables during the installation process and Unix executable flag support (useful for the scripts for instance)
·         layout of the installation files in packs (some can be optional)
·         native code integration facilities
·         jar files nesting support
·         ... more things to discover and create !.
(图-4)IzPack制作的安装界面示例-选择安装的Pack.
利用izpack制作安装程序的主要有两步:
第一步:创建并描述安装定义文件;
第二步:通过izpack提供CommandLine工具或Ant Task对安装定义文件进行编译,编译的结果即是生成一个可执行的jar文件,其中包括了整个安装过程的实现以及安装数据;
  • 安装定义文件:
安装过程定义文件是一个XML文件,installation是根元素,表示定义的开始。定义主要由如下几部分组成:
1.<info>….</info>
       用于定义安装程序的基本信息;

<info>
<appname>产品中文名称</appname>
<appversion>产品版本号,例如:1.0-062312</appversion>
<url>公司网址</url>
<javaversion>JDK版本号:1.4.2</javaversion>
</info>

2.<guiprefs>……</guipref>
       用于定义安装程序界面信息,例如:

       <!--**安装界面配置信息**-->
       <guiprefs resizable="no" height="480" width="600">
              <modifier key="langDisplayType" value="native" />
       </guiprefs>

3.<variables>……..</variables>
       定义变量或配置信息,变量在整个安装制作的过程中非常重要,变量两种用途:其一:作为配置用,例如可以通过按照一定的命名称规则为某个变量设定一个值,izpack在执行安装过程中将会读取某个变量的值来决定某个安装向导窗口是否可见等;例如:我们可以通过定义compareToVariable.<index>、compareToOperator.<index>与compareToValue.<index>的组合决定第<index>个用户自定义的向导窗口在安装时是否可见,这样就可以通过上个窗口用户选择来决定下个窗口是否可见;其二:作为替换变量用,通常安装过程中收集的信息存放在变量中,然后,在安装程序进行到最后,利用变量的值来替换安装目标文件中的内容。

       <variables>
              <!--**显示快捷键创建窗口标识**-->
              <variable name="DesktopShortcutCheckboxEnabled" value="true" />
              <!--**设定部分变量的缺省值**-->
              <variable name="SERVER_TYPE" value="tomcat" />
              <variable name="SERVER_PATH" value="" />
<!--**TOMCAT PORT输入窗口(index=1)判定**-->
              <variable name="compareToVariable.1" value="INSTALL_TYPE" />
              <variable name="compareToOperator.1" value="=" />
              <variable name="compareToValue.1" value="new" />
             
       </variable>

  
4. <locale>….</locale>
  决定,安装程序界面所支持的语言。

       <!--**安装界面语言定义**-->
       <locale>
              <langpack iso3="chn" />
              <langpack iso3="eng" />
       </locale>

 
5. <resources>……..</resources>
       用于为安装界面指定图片或图标
       用于指定用户自定义安装向导窗口定义XML文件的位置
       用于指定安装向导窗口中国际化资源XML文件的位置
       等等,例如:

    <!--** 安装界面资源定义 **-->
    < resources >
       <!--**XX 安装语言选择窗口图片 **-->
       < res src = "langsel.jpg" id = "installer.langsel.img" />
       <!--**XX 安装说明文件 **-->
       < res src = "readme.html" id = "HTMLInfoPanel.info" parse = "yes" type = "plain" encoding = "GB2312" />
       < res src = "readme_chn.html" id = "HTMLInfoPanel.info_chn" parse = "yes" type = "plain" encoding = "GB2312" />
       <!--**XX 产品版本说明文件 **-->
       < res src = "license.html" id = "HTMLLicencePanel.licence" parse = "yes" type = "plain" encoding = "GB2312" />
       < res src = "license_chn.html" id = "HTMLLicencePanel.licence_chn" parse = "yes" type = "plain" encoding = "GB2312" />
       <!--** 快捷键定义描述 **-->
       < res src = "shortcutSpec.xml" id = "shortcutSpec.xml" parse = "yes" type = "xml" encoding = "GB2312" />
       < res src = "Unix_shortcutSpec.xml" id = "Unix_shortcutSpec.xml" parse = "yes" type = "xml" encoding = "GB2312" />
       <!--**Pack Lang**-->
       < res src = "packsLang.xml" id = "packsLang.xml" />
       < res src = "packsLang_chn.xml" id = "packsLang.xml_chn" />
       <!--** 自定义窗口定义描述 **-->
       < res src = "UserInputSpec.xml" id = "userInputSpec.xml" />
       < res src = "UserInputLang.xml" id = "userInputLang.xml" />
       < res src = "UserInputLang_chn.xml" id = "userInputLang.xml_chn" />
      
    </ resources >
      

  
6.<panels> ……. </panels>
本部分用于定义整个安装过程,每个panel即是一个安装向导窗口,panel是按顺序由IzPack调用的。IzPack内置了很多的Panel,另外它还支持用户自定义的功能,主要是通过UserInputPanel来实现的,你可以通过在<resources>……</resources>中定义的ID为UserInputSpec.xml的资源(XML)中定义UserInputPanel窗口中用户录入项目及相关存放的变量。另外,Izpack支持条件用户自定义Panel,即ConditionalUserInputPanel,你可以在<variables>….</variables>中通过变量来控制这样的向导窗口的可见性。当安装过程执行到InstallPanel时IzPack开始解压安装包到硬盘中,所以,一般来说所有的配置信息(例如,安装目录,安装包的选择等)都应在InstallPanel之前完成。在InstallPanel之后可以通过ShortcutPanel来显示快捷方式创建窗口,另外还可以通过ProcessPanel来执行一些后续操作。

    <!--** 安装界面定义 **-->
    < panels >
       <!--** 显示公司版权信息 **-->
       < panel classname = "HTMLLicencePanel" />
       <!--** 显示 ReadMe 信息 **-->
       < panel classname = "HTMLInfoPanel" />
       <!--** 选择安装目标 **-->
       < panel classname = "TargetPanel" />
       <!--** 选择安装内容 **-->
       < panel classname = "PacksPanel" /> <!--**INSTALL_PATH**-->
       <!--** 选择安装类型 : 安装到已有应用服务器中 安装 TOMCAT 作为应用服务器 .**-->
       < panel classname = "UserInputPanel" /> <!--**INSTALL_TYPE:new|old**-->
             
       <!--** 显示用户安装输入配置 **-->
       < panel classname = "SummaryPanel" />
       <!--** 开始安装 **-->
       < panel classname = "InstallPanel" />
       <!--** 显示快捷键创建窗口 **-->
       < panel classname = "ShortcutPanel" />
       <!--** 显示安装完成窗口 **-->
       < panel classname = "SimpleFinishPanel" />
    </ panels >
             

      
7. <packs> ……. </packs>
       本部分主要用于定义安装包,即将哪些文件进行打包,以及将来安装时如何进行安装。通过<pack>可以将应用程序文件分解成不同的安装包,可以指定哪些pack是必须安装的,哪些是可选的。
       前边我们讲过,我们可以在<panels>中加入自定义向导窗口来允许用户指定一些配置,这些配置信息被存放到变量中,我们可以利用用户指定的值来替换应用程序中部分文件中的内容。那么在定义pack时,就可以指定哪些文件在安装时需要进行解析(parseable)。需要注意的,你需要指定需要解析的方式(xml, javaprop, plain,shell),如查将javaprop类型的文件解析类型设定为plain的话,可以就有问题,例如:如果变量的值为路径,那么在可能就会有问题。
另,对于每一个Pack在它安装(copy文件)之后,可以定义它执行一个程序,例如脚本程序。你可以利用这种功能来做一些工作,例如:你可执行脚本程序来导入数据库数据等。
下面是一个示例:

<!--** 安装包的定义 **-->
    < packs >
       <!--** 安装及运行辅助工具包 .**-->
       < pack id = "ToolKit" name = "ToolKit" required = "yes" >
           …………
       </ pack >
       <!--** 核心安装包 **-->
       < pack id = "Core" name = "Core" required = "yes" >
       < description > packsLang.xml packsLang.xml_chn 中描述了 . </ description >
           < fileset dir = "app" targetdir = "$INSTALL_PATH/app" >
              < include name = "*" />
              < include name = "**" />
           </ fileset >
           < fileset dir = "native" targetdir = "$INSTALL_PATH/native" >
              < include name = "*" />
              < include name = "**" />
           </ fileset >
           < file src = "clear.db.splash.gif" targetdir = "$INSTALL_PATH" />
           < file src = "init.db.splash.gif" targetdir = "$INSTALL_PATH" />
           < file src = "installer.properties" targetdir = "$INSTALL_PATH" />
           < file src = "installer.xml" targetdir = "$INSTALL_PATH" />
          
           < file src = "installer.bat" targetdir = "$INSTALL_PATH" />
           < file src = "uninstaller.bat" targetdir = "$INSTALL_PATH" />
           < parsable targetfile = "$INSTALL_PATH/installer.properties"
type = "javaprop" />
          
           < parsable targetfile = "$INSTALL_PATH/installer.bat" type = "plain" />
           < parsable targetfile = "$INSTALL_PATH/uninstaller.bat" type = "plain" />
            < executable targetfile = "$INSTALL_PATH/installer.bat"
stage = "postinstall" keep = "false" failure = "abort" >
                       < os family = "windows" />
           </ executable >
           < executable targetfile = "$INSTALL_PATH/uninstaller.bat"
stage = "uninstall" keep = "true" failure = "abort" >
              < os family = "windows" />
           </ executable >
       </ pack >
    </ packs >

 
 
8. jar & native & 其它:
       另外,你的安装程序在安装过程中可能会需要其它的Java包来完成一些工作,例如,你在自定义向导窗口中做了用户输入的数据库连接有效性检查,如果你是通过创建 JDBC连接来做的话,你就需要JDBC driver的jar,那么你就需要通过<jar />来加入这些jar包。例如:

<!--** 安装程序所需要的其它 Jar 文件夹 **-->
    < jar src = "dbdrivers/mssqlserver.jar" stage = "both" />
    < jar src = "dbdrivers/msutil.jar" stage = "both" />
    < jar src = "dbdrivers/msbase.jar" stage = "both" />
    < jar src = "dbdrivers/ojdbc14.jar" stage = "both" />
    < jar src = "dbdrivers/orai18n.jar" stage = "both" />

       还有,如果你的安装程序在安装过程中需要调用native应用的话,例如:你的安装程序界面中通过Java JNI访问机器硬件的话,你就需要JNI的动态库加入到安装程序中。例如:

<!--** 安装程序所需要的 Native 文件 **-->
< native type = "izpack" name = "ShellLink.dll" />

 
基本上来说,一个应用安装定义文件由如上内容就可以了。当然为了能够制作出功能强大的安装程序,你可能需要定制IzPack,包括通过API以及扩展其现有功能,你需要认真深入了解IzPack.
关于安装定义文件的具体详细说明请参考IzPack参考手册,其中有非常详细的说明。它是整个安装程序制作的核心。功能非常强大,非常灵活。
  • 编译:
一但,安装定义文件准备好了之后,你就可以利用IzPack对其进行编译了,编译的结果就是生成一个可执行的jar文件,一般可命名为installer.jar文件。
当然了,在进行编译之前,你需要根据安装定义文件来组织目录并将相关的应用文件放到相应的目录下。IzPack对于这些没有什么特别的要求,一般情况下,你可以将需要安装的文件放到一个目录下,在目录下按照目标安装结构进行组织文件即可。将安装定义文件放到根目录下。
在文件组织好之后,即可进行编译了。
有两种方式进行编译:
(1). Command Line 方式:
   ……> %IzPack_home%/bin/compiler.bat < 安装定义文件>
  即进入上面准备好的目录下,  通过IzPack提供的compiler.bat来执行即可。
(2). Ant方式:
首先,在Ant Build文件中加入IzPack任务定义:
<taskdefname="izpack"
                             classpath="${izpack.dir}/lib/compiler.jar"
            classname="com.izforge.izpack.ant.IzPackTask"/>
然后,调用izpack任务即可:
<izpackinput="${安装定义XML文件}"
               output="${installer.jar}"
               basedir="${上面准备好的目录根目录}"
               izPackDir="${izpack安装目录}"
              installerType="standard"
               compression="bzip2"
compressionlevel="9"/>
通过如上任何一种方式都可以生成安装程序――――一个可执行的jar文件。
      
       所以通过IzPack我们可以很容易将制作应用安装程序。
        关于IzPack的详细介绍请参考 http://www.izforge.com/izpack/
到目前为止,我们介紹了一些开源的与安装制作相关的工具,同时对Jsmooth与IzPack安装程序制作方式与过程做了一定的讲解。随后我们将会利用IzPack与Jsmooth给出一个Web应用安装盘制作的过程。
   
本部分就利用IzPack+Jsmooth为一个Web应用制作安装程序
待续。。。。。。
待续。。。。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值