Picses' sky

Picses' sky
posts - 43, comments - 29, trackbacks - 0, articles - 24

制作Java安装程序(转)

Posted on 2007-03-13 09:17 Matthew Chen 阅读(2120) 评论(1)  编辑  收藏

ROXES ANT,制作Java安装程序- -

                                      

 ROXES ANT Tasks
这个工具利用 ANT 来制作在 Windows, MacOS X, Unix 平台上可执行的文件,比如 exe,zip,jar。ROXES ANT Tasks 基于 GPL 发布。
 主页 A href="http://www.roxes.com/produkte/rat.html">http://www.roxes.com/produkte/rat.html

 企业开源参考架构

本图来自于灰狐动力: http://www.huihoo.com/

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


目录:
随着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 任务定义:
<="" span="" /> <>
classname="net.charabia.jsmoothgen.ant.JSmoothGen"
classpath="${jsmooth_home}/lib/jsmoothgen-ant.jar"/>
然后,通过jsmoothgen任务来执行生成Exe的工作:
skeletonroot=”${jsmooth_home}/skeletons”/>
所以通过Jsmooth我们可以很容易将Java Application制作Windows Exe应用。
关于Jsmooth的详细介绍请参考http://jsmooth.sourceforge.net/
4.2.1. izpack 简介:
  • 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.…./STRONG>
用于定义安装程序的基本信息;

产品中文名称 /SPAN>
产品版本号,例如: 1.0-062312/SPAN>
公司网址 /SPAN>
JDK 版本号: 1.4.2/SPAN>
/FONT>
2 ……/STRONG>
用于定义安装程序界面信息,例如:

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

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

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

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

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

< packs >
< pack id = "ToolKit" name = "ToolKit" required = "yes" >
…………
SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">pack >
< pack id = "Core" name = "Core" required = "yes" >
< description > packsLang.xml packsLang.xml_chn 中描述了 . SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">description >
< fileset dir = "app" targetdir = "$INSTALL_PATH\app" >
< include name = "*" />
< include name = "**" />
SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">fileset >
< fileset dir = "native" targetdir = "$INSTALL_PATH\native" >
< include name = "*" />
< include name = "**" />
SPAN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f">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" />
&




我想把我做好的java应用程序做成安装包,可以在没有java环境的电脑上顺利安装和运行,请问该如何制作?需要用到什么工具?

我现在还在测试的方法是:把com(编译产生的类文件目录,是代码中的包)、image(图标目录)和lib(第三方库文件,比如jbuilder的jbcl.jar)压缩成一个.jar文件,配合一个data(数据库目录,一个access文件),只要双击jar文件就可以运行。是不是还要一个jre安装包?

请指教,多谢!


用InstallAnywhere等安装包制作工具是相对方便的
他可以搜索本机JRE,或是单独安装一个JRE,生成exe laucher

自己做的,把JRE复制下来,写个bat执行那个jre中的java
如MyProject/JRE
MyProject/run.bat JRE/bin/java.exe -Xmx300M -jar project.jar

 

shsen wrote:
你是说把j2sdk安装目录下的那个jre目录拷贝到我的程序目录下,再做一个bat文件就可以吗?

-Xmx300M 是什么意思?

 

对的,在没有用InstallAnywhere之前我这么做过。
-Xmx300M是指JVM最大分配内存300M,如果你的应用不大,就不用管这个


谢谢,我试试看。也安装了IA5,试用了一下,好像产生出来的不是可执行文件。


只有注册用户登录后才能发表评论。


网站导航: