制作产品的安装包

制作产品安装包的软件有很多,开源的,破解的都很容易搞到,但是如果想定制化一些处理逻辑及界面,似乎就比较麻烦。另外,对于使用JAVA编写的安装程序,在安装前需要系统已经安装了JRE,似乎是难免的要求,如果能够在安装程序中绑定JRE,这样用户安装时不需要事先安装JRE就可以运行安装程序,将带来很大的便利性。下面我根据自己研究的两个用于实现上述要求的内容,进行一些讲述,重点将放到后者,即JRE的绑定。
我使用的开源包叫Izpack,现在最新版本是5.0,但要注意这个版本还在shapshot阶段,没有release包,根据我使用的经验,发现现在的BUG比较多,所以,建议使用4.3.5。至于它的原理,及使用指南,可以参考doc中的参考指南,很详细,虽然指南的版本是3.7,但大部分没有变化。其中有变化的我记得影响的部分应该是install.xml中一些配置的属性,在4.x的代码中有,但是文档没有说明,同样在shortcut.xml的说明部分也有这种情况,所以,在实际使用时,不防去代码中看看都有哪些属性。使用事例及框架先不说明了,因为指南里很详细的说明了。下面提一下使用时工程的建立相关的内容。
建议将其源代码下载下来,做为一个maven工程,以方便查看代码,以及有需要时,进行修改,需要注意的是,虽然其源代码工程中包含了一个eclipse下的代码样式xml文件,但是可惜的时,大部分源代码没有使用这个来格式化。
然后,再新建一个自己的工程,用于创建核心的install.xml,及资源文件,快捷键配置文件等。这里有一个sample,很适合用于搭建基于maven来管理的工程。我把它摘出来放到了附件可下载。其实它就在
https://github.com/izpack/izpack/tree/master/izpack-maven-plugin/src/it
,在这个的基础上,搭建一个可以构建出安装jar的工程。
下面,再说一说将jar打成exe的内容。lanuch4j,exe4j都可以实现这个功能,但是遗憾的是,不能绑定JRE,即,需要使用相对路径来指定系统的JRE,对于想一个exe直接无依赖的运行,还是行不通的。于是,找其它的,发现有这样一篇文章:
http://www.cnblogs.com/cuizhf/archive/2011/09/25/2189942.html
这是转载的,里面说明netbean项目有一个NBI的项目,可以实现将产品生成exe或者sh,实现双击运行安装。目前我还不是很熟悉这个NBI,不知道是不是有简单一些的方法用于将指定JAR生成exe并绑定JRE,如果有,如果您知道,麻烦请赐教。下面说一下我的方式。
一、生成jre.exe,方式就根据上面那个连接中描述的。只是unzipsfx.exe的获取我是费了劲,它上面说源代码里有,但没有说哪个包,其实还有一个地方有。
http://wiki.netbeans.org/NBIExamples
下载这个示例。
比如你解压到example的目录下,那它们就在example\nbi\infra\build\jvm\tools\unzipsfx
中。生成jre.exe后。
跳过其它的说明,直接使用NBI的JAVA代码来生成exe或者sh。但先用ant构建这个示例,然后,找engine.jar或者nbi-engine.jar,两者一样只是目录不同。
我们将使用这个jar来生成上exe。其实就是使用SystemUtils.createLauncher()这个方法。传入对应的配置信息,如果不了解那些数据对象如果构建,可以在代码中打印一些对象信息,并将
RegistriesManagerImpl中的
            FileUtils.deleteFile(tempStatefile);
            FileUtils.deleteFile(tempPropertiesFile);
            FileUtils.deleteFile(tempUserDir, true);
这三行注释掉,因为在
\build\output\registry-temp\temp\nbi-3162158525163754541.tmp\nbi-6538473934668573607.tmp\log
有日志信息。不注释掉会被删除。当然上面这目录有nbi-xxx这个是随机生成的目录。
然后执行上面一步的build。就可以查看log中你写的打印对象信息的日志了。
使用一个main方法调用SystemUtils.createLauncher(),传入指定的对象,工程依赖engine.jar,就可以创建出想要的exe了。
注意,由于这个示例似乎不是一个独立的工程,我是把里面所有的src纳入到一个JAVA工程中,便于跟踪查找。

猜你喜欢

转载自huihuilou.iteye.com/blog/1842258