制作Java安装程序
这个工具利用 ANT 来制作在 Windows, MacOS X, Unix 平台上可执行的文件,比如 exe,zip,jar。ROXES ANT Tasks 基于 GPL 发布。
http://www.roxes.com/produkte/rat.html
企业开源参考架构
Java Web应用产品安装程序制作方案
目录:
一.背景
二.开源工具
三.环境准备
四.技术准备
4.1. Jsmooth
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
Packlet是一个简单的Java安装制作工具。它将Java Application打包成一个可以发布的类似于zip或tgz的压缩文件中。这个压缩文件被简为packlet,它可以在安装有Java 2 Runtime Environment的操作系统上执行. 通过执行packlet将会给用户提供一个图形化的安装配置界面并解压应用。
Go To Packlet
IzPack
IzPack是一个用于Java平台的安装程序生成器。它用于产生一个轻量级、能运行于所有安装了JVM的任何的操作系统的安装程序。生成的安装程序可以通过双击或在Command Line通过java –jar install.jar命令进行启动,安装程序运行的方式具体将看操作系统的支持方式。IzPack的主要好处就是能够生成运行于任意操作系统的安装程序。
Go To IzPack
JSmooth
Jsmooth可以将Java可执行应用Wrapper成window可执行Exe程序。通过Jsmooth生成的Exe程序会自动按制作时定义的顺序寻找合适的JVM,如果能不查找到JVM,安装程序会提示用户并能根据定义好的URL启动Web Browser让用户下载JVM. 注意:Jsmooth并不是纯Java应用。
Go To JSmooth
VAInstall
VAInsall是一个用Java写的多平台安装程序工具。它是基于GNU GPL2.0许可。通过一个简单的配置文件,它允许安装程序打包工具由不同的目录下收集程序包,这与一般情况下安装程序制作工具只能由一个根目录开始相比更为灵活。由VAInstall生成的安装程序允许先择不同的安装模式(graphic,text或ansi)。
Go To VAInstall
Java Service Wrapper
用于将Java Application安装成为Window NT Service.同时与之附带的scripts能够很容易将Java Application安装成为UNIX的后台进程。
Go To Java Service Wrapper
Lift Off Java Installer
Lift Off Java Installer的最大特色就是:自解压class 文件,对目标系统要求低以及跨平台性。
Go To Lift Off Java Installer
Toolshed
一个小巧、简单、纯Java实现的安装程序制作工作。
Go To Toolshed
Launch4J
Lauch4J也是一个Java应用Window Exe封装工具。通过Lauch4J,可以提供splash screen, 图标,自动查询JRE或内置JRE等功能,同时还支持启动失败反馈以及命令行参数。
Go To Launch4J
AntInstaller
AntInstaller是一个安装程序框架,它利用一个简单的XML定义安装界面,并以Ant执行安装过程。基于AntInstaller的安装程序可以打包成自解压jar通过command line执行可Swing GUI来执行。
Go To AntInstaller
Antigen
Antigen----即Ant Installer Generator。它主要的目的就是根据Ant脚本创建图形化安装程序。
Go To Antigen
FreeInstaller
FreeInstaller是一个开源项目,完全用Java编写。它将应用程序打包成一个自解压的Java应用。通过FreeInstaller可以将Java或非Java的应用安装到UNIX,LINUX以及window NT系统中。
Go To FreeInstaller
Mini Installer
一个简单的Java安装程序制作工具。整个制作过程是通过脚本完成的,最终生成一个可以通过双击方式执行的jar文件。
Go To Mini Installer
通过对如上各产品的初步探索,本人最终选择了利用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. 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 任务定义:
<>
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. izpack:
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.
4.2.2. 原理及过程
利用izpack制作安装程序的主要有两步:
第一步:创建并描述安装定义文件;
第二步:通过izpack提供CommandLine工具或Ant Task对安装定义文件进行编译,编译的结果即是生成一个可执行的jar文件,其中包括了整个安装过程的实现以及安装数据;
安装定义文件:
安装过程定义文件是一个XML文件,installation是根元素,表示定义的开始。定义主要由如下几部分组成:
1.….
用于定义安装程序的基本信息;
产品中文名称
产品版本号,例如:1.0-062312
公司网址
JDK版本号:1.4.2
2.……
用于定义安装程序界面信息,例如:
3.……..
定义变量或配置信息,变量在整个安装制作的过程中非常重要,变量两种用途:其一:作为配置用,例如可以通过按照一定的命名称规则为某个变量设定一个值,izpack在执行安装过程中将会读取某个变量的值来决定某个安装向导窗口是否可见等;例如:我们可以通过定义compareToVariable.、compareToOperator.与compareToValue.的组合决定第个用户自定义的向导窗口在安装时是否可见,这样就可以通过上个窗口用户选择来决定下个窗口是否可见;其二:作为替换变量用,通常安装过程中收集的信息存放在变量中,然后,在安装程序进行到最后,利用变量的值来替换安装目标文件中的内容。
4. ….
决定,安装程序界面所支持的语言。
5. ……..
用于为安装界面指定图片或图标
用于指定用户自定义安装向导窗口定义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" />
resources>
6. …….
本部分用于定义整个安装过程,每个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" />
panels>
7. …….
本部分主要用于定义安装包,即将哪些文件进行打包,以及将来安装时如何进行安装。通过可以将应用程序文件分解成不同的安装包,可以指定哪些pack是必须安装的,哪些是可选的。
前边我们讲过,我们可以在中加入自定义向导窗口来允许用户指定一些配置,这些配置信息被存放到变量中,我们可以利用用户指定的值来替换应用程序中部分文件中的内容。那么在定义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" />
制作Java安装程序的更多相关文章
- Java安装程序制作
对于Java桌面应用来说,比较烦琐的就是安装部署问题,如:客户端是否安装有jre.jre版本.jre在哪里下载.如何用jre启动 Java应用等等.不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接 ...
- 使用InstallAnywhere7.1制作Java exe程序安装包
[转[使用InstallAnywhere7.1制作Java exe程序安装包 使用InstallAnywhere7.1制作Java exe程序安装包 对于已经完成的Java应用程序开发项目,从商业化角 ...
- 制作PHP安装程序的原理和步骤56
制作PHP安装程序的原理和步骤56 1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实P ...
- C#制作自定义安装程序
(一),安装程序 以前用vs制作过安装程序,现在把步骤写出来,有帮助的大家一定要顶哦 第一步:建立工程 1.打开vs,新建项目->其他项目类型->安装和部署(這個子项下面有安装项目和Web ...
- C# 批处理制作静默安装程序包
使用批处理+WinRAR制作静默安装程序包 @echo 安装完窗口会自动关闭!!! @echo off start /wait Lync.exe /Install /Silent start /wai ...
- 怎样制作C#安装程序
近期须要制作一个C#安装.在网上找了一些资料发现都不是非常完整,最后自己综合了一些资料,而且通过亲自检測,最后成功完毕C#打包成安装程序(打包成最简单的一种安装程序.假设须要更高的功能请自己在开发). ...
- 制作web安装程序
出处:http://www/i-blog.cn/u/chenli/archives/2006/8.html 本文参考http://blog.csdn.net/libra1983/archive/200 ...
- 制作Java桌面程序的一键安装包
一.简介 这个打包程序主要包含了对Java程序的普通打包.对程序的管理员权限设置.因为自己打包的时候要求程序在32位操作系统和64位操作系统下都能使用,所以有些打包步骤和设置都不相同.打包过程中主要使 ...
- vb6.0安装程序制作图解教程
如何制作vb安装程序,是在学习Vb6.0过程中比较常见的一个入门问题. 在此笔者介绍一个最简单的安装方法,就是用VB自带的打包程序进行打包,虽然比较普通,不过内部却有不少窍门,相信这一点知道的人可能不 ...
随机推荐
- 【重点】Jmeter----- 将 JDBC Request 查询结果作为下一个接口参数方法(二)
一.说明 jmeter与数据库mysql已连接成功 二.需求 1.前置条件: 1.已user数据库的前8位手机号码作为行动计划的名称 2.行动计划的日期是2018-10-17 2.操作步骤: 1)获取 ...
- touch命令的用法
touchtouch 文件,如果文件不存在,则创建一个新文件:如果文件存在,则将该存在的文件的修改时间或创建时间改为当前时间touch -t 时间戳 文件,则把该文件的时间改了
- 某PCBA企业应用易普优APS实现高级计划排程案例
一.项目介绍 1.生产计划现状 某PCBA企业(以下简称A企业)的产品生产是典型的多品种.小批量.多变化的生产模式.其中产品种类有1000多种,主流的200多种,每个月数百个生产订单,分解到工序以后的 ...
- asp.net core结合Gitlab-CI实现自动化部署
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在之前的文章中写过k8s+Jenkins+GitLab-自动化部署asp.net core项目 的topic,这次讲解一 ...
- 【Java学习】调用ByteBuffer.getInt()方法得到808464432
调用ByteBuffer.getInt()方法遇到的奇怪错误 最近在参加阿里的中间件比赛,中间用到了RocketMQ的思想,并且主要集中在使用NIO来读写文件.其中遇到了一个很蛋疼的问题,想了半天想不 ...
- hibernate-release-4.3.11.Final资源包介绍
资源下载 hibernate-release-4.3.11.Final documentation 包 相关文档 lib 相关jar包 required --开发中必须要加入的包 optional ...
- CSS 笔记——列表表格
6. 列表表格 -> 列表 (1)list-style 基本语法 list-style : list-style-image || list-style-position || list-sty ...
- Week Four
2018.12.18 1.[USACO Platinum C] 2.[Gym 102028H] 3.[BZOJ 2750] 4.[BZOJ 3238] 5.[BZOJ 4310] 6.[BZOJ 38 ...
- YanghuiTriangle
Demand 1 用实现循环队列 2 参考PPT用循环队列打印杨辉三角 3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息 4 把代码推送到代码托管平台 5 把完成过程写一篇博 ...
- [HEOI2013]SAO
题目大意: 一个有向无环图上有n个结点, 现在告诉你n-1个条件(x,y),表示x和y的先后关系. 问原图共有几种可能的拓扑序? 思路: 树形DP. f[i][j]表示对于第i个结点,有j个点在它前面 ...