??xml version="1.0" encoding="utf-8" standalone="yes"?>
?/span>lzPack1-1
下一步如图:Q你发现?/span>lzPack本n的安装过E和界面是一LQ不q也已经够漂亮了Q是吧)Q以后都是下一步的图)
?/span>lzPack1-2
图lzPack1-3
图lzPack1-4
图lzPack1-5
图lzPack1-6
图lzPack1-7
图lzPack1-8
点击Done完成安装
看看我们sample的结构(卌安装的YӞ
?/span>lzPack1-9
看看安装好的文gl构
?/span>lzPack1-10
了一个文?/span>listenerQ多了一个文?/span>uninstaller,q入uninstaller双击uninstaller.jarq到卸载界面了Q超单的界面Q就不脓了)。我们在回头看看那个配置文ginstall.xml,如下Q?/span>
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
- <!--
A sample installation file.
Use it as a base for your own installers :-)
To compile it :
- go in the bin directory where you installed IzPack
- call "compile ../sample/install.xml -b ../sample"
-->
- <installation version="1.0">
- <!--
The info section.
The meaning of the tags should be natural ...
-->
- <info>
<appname>Sample Installation</appname>
<appversion>1.4 beta 666</appversion>
- <authors>
<author name="JPz" email="jpz@superman.org" />
<author name="Hidden Man" email="hidden@hisdomain.com" />
</authors>
<url>http://www.anotherworld-inspace-website.net/</url>
</info>
- <!--
The gui preferences indication.
Sets the installer window to 640x480. It will not be able to change the size.
-->
<guiprefs width="640" height="480" resizable="no" />
- <!--
The locale section.
Asks here to include the English and French langpacks.
-->
- <locale>
<langpack iso3="eng" />
<langpack iso3="fra" />
</locale>
- <!--
The resources section.
The ids must be these ones if you want to use the LicencePanel and/or the InfoPanel.
-->
- <resources>
<res id="LicencePanel.licence" src="Licence.txt" />
<res id="InfoPanel.info" src="Readme.txt" />
</resources>
- <!--
The panels section.
We indicate here which panels we want to use. The order will be respected.
-->
- <panels>
<panel classname="HelloPanel" />
<panel classname="InfoPanel" />
<panel classname="LicencePanel" />
<panel classname="TargetPanel" />
<panel classname="PacksPanel" />
<panel classname="InstallPanel" />
<panel classname="FinishPanel" />
</panels>
- <!--
The packs section.
We specify here our packs.
-->
- <packs>
- <pack name="Base" required="yes">
<description>The base files</description>
<file src="Readme.txt" targetdir="$INSTALL_PATH" />
<file src="Licence.txt" targetdir="$INSTALL_PATH" />
<file src="script.bat" targetdir="$INSTALL_PATH" />
<parsable targetfile="$INSTALL_PATH/script.bat" />
- <!--
The file will be parsed
-->
</pack>
- <pack name="Docs" required="no">
<description>The documentation</description>
<file src="doc" targetdir="$INSTALL_PATH" />
- <!--
Reccursive adding
-->
</pack>
- <pack name="Sources" required="no">
<description>The sources</description>
<file src="src" targetdir="$INSTALL_PATH" />
</pack>
</packs>
</installation>
我算它是七段Q第一D?/span>
<installation version="1.0">
声明安装的版?/span>
W二D?/span>
<info>
<appname>Sample Installation</appname>
<appversion>1.4 beta 666</appversion>
- <authors>
<author name="JPz" email="jpz@superman.org" />
<author name="Hidden Man" email="hidden@hisdomain.com" />
</authors>
<url>http://www.anotherworld-inspace-website.net/</url>
</info>
声明软g的基本信息:名称、版本、各个作者和联系方式、公怸c对应图lzPack1-2?/span>
W三D?/span>
<guiprefs width="640" height="480" resizable="no" />
讄安装D的宽高等属性?/span>
W四D?/span>
<locale>
<langpack iso3="eng" />
<langpack iso3="fra" />
</locale>
语言选择Q对应图?/span>lzPack1-1?/span>
W五D?/span>
<resources>
<res id="LicencePanel.licence" src="Licence.txt" />
<res id="InfoPanel.info" src="Readme.txt" />
</resources>
提供两个资源l客户阅读,对应两个界面Q图lzPack1-3?/span>lzPack1-4。分别ؓ软g说明和基本条ƾ?/span>
W六D?/span>
<panels>
<panel classname="HelloPanel" />
<panel classname="InfoPanel" />
<panel classname="LicencePanel" />
<panel classname="TargetPanel" />
<panel classname="PacksPanel" />
<panel classname="InstallPanel" />
<panel classname="FinishPanel" />
</panels>
说明序下来都经q那些界面?/span>
W七D?/span>
<packs>
- <pack name="Base" required="yes">
<description>The base files</description>
<file src="Readme.txt" targetdir="$INSTALL_PATH" />
<file src="Licence.txt" targetdir="$INSTALL_PATH" />
<file src="script.bat" targetdir="$INSTALL_PATH" />
<parsable targetfile="$INSTALL_PATH/script.bat" />
- <!--
The file will be parsed
-->
</pack>
- <pack name="Docs" required="no">
<description>The documentation</description>
<file src="doc" targetdir="$INSTALL_PATH" />
- <!--
Reccursive adding
-->
</pack>
- <pack name="Sources" required="no">
<description>The sources</description>
<file src="src" targetdir="$INSTALL_PATH" />
</pack>
</packs>
提供了要复制的文件夹l构Q由<packs>标签包括
共有三个包,每个包由<pack>标签标识Q?/span> name=”base” 的包为基本包Q包括所有文件和文g夹的文g夹,其下包括三个文g?/span>$INSTALL_PATH卛_装\径,qL?/span>
?/span>Docs 是文件夹doc?/span>
<file >元素标明文g或文件夹Q?/span>src属性ؓ文g或文件夹名,targetdir属性ؓ要放到的路径
?/span>Sources是文件夹src?/span>
整个文gl构和关pd由最后这一D|阐释?/span>
另外Q包<pack>q可以有其他的用途,下一节是个较实用的实例,你会看到它的用途,要不我们打的包都?/span>izpack一样光U秃的,没快捷键Q没环境变量Q在实践中我们慢慢发现光明,原来有趣的东西等着我们L索?/span>
pY件的安装界面来看Q它打出来的包也Z错,q算一U自w思考吧。安装完毕时Q它叫保存什么东西?q什么格式也弄不清(好几个点呢)Q随便取名保存吧。失望的是,它没有弹q文Ӟ看看桌面上,从开始菜单进M看,有卸载和帮助Q就是没有启动。你是不是该怀疑你下蝲的东西被人做q手脚,可这是官方的呀。简单,问题来了。我们就惛_键字Q?/span>google上输入Y件名“IzPack”Q点ȝx?/span> “lzpack使用”。看了几个简l的Q教学大同小异,知道有大概策略,却无从下手,关键在于写文章的不像我一样喜Ƣ搞{略QL没我需要的实际Q高效。他们往往会讲重点Q但却不注意切入点,在大学听课也l常q样Q让你痛苦不Ԍ像被蚊子叮了,挠痒痒的只挠旁边。L看不C的存在?/span>
那些重点、难点你已经知道是那些就行了Q其实还不用知道Q知道是Z先蟩q)Q只l致的搜寻这你要的切入点。有一个网说有两三种?/span>IzPack的方法,只是概述那种也把责Q推给官方。不q看C|站q一D?#8220;q个software的基本思想是Q它l你提供了许多安装步骤所需要的panelQ比如选择安装路径、选择安装的内宏V观?/span>License{等Q,然后你自己写一?/span>install.xml文g你自己软g的信息、安装需要的步骤、以及安装的资源{等都写q这个文仉Q然后用它所提供?/span>compile批处理文件编译这个文?/span>(e.g. compile install.xml)Q它׃自动生成一?/span>install.jar的可执行Java包。至此,整个q程q束了Q双击这?/span>install.jarQ就能启?/span>install界面?#8221;Q可以想到应该用命o行的方式来用q个软gQ其实这个想法早出来了,因ؓQ桌面上也没?/span>lzPack的快h式。可我用命令上只会如 Javac xx.java q一U,不过q一点也够了Q我已经萌生了一个测试策略。不是命o加参数吗Q验证一下再看其他的?/span>
1. ?/span>cmdq入软g?/span>bin目录Q?/span>compile.bat在这里)
2. 软g附有样例q是常规Q进入Y件目?/span>IzPack下的sample(只有一?/span>xml,compile 处理的就应该?/span>xmlQd只有一个样例,当然所有东西全?/span>)Q全选,复制Q脓?/span>bin目录下(不用怕了,到时咱对照着删就是了Q?/span>
3. (输入什么呢Q应该以bat文g为命令吧Q以所要处理的文g为参数。那?/span>)输入
Compile install.xml
有输出,有许多文字在输出Q你已经露微W了Q不q命中,是q么用,一?/span>bin中多了个install.jar,更攑ֿ了。双ȝ看,哦,原来是个语言选择界面。那么你该处?#8220;{略垃圾”了,你同时打开bin目录?/span>sample目录Ҏ着?/span>bin中复制来的文件一个一个删掉(q只是一U严慎的行ؓQ因为错误M随时降Q?/span>
Bin未删sample里复制过来的文g时如下图Q?br />
你其实挺兴奋Q严D下你的第一ơ,以备以后快速进入和研究Q于是你q把cmd上留下的命o行输出复制出来留待研I。而且你的很多{略也出来了Q那?/span>sample是你参照的对象Q写xml可以仿写Q?/span>sample的结构有多复杂,你打包处理的软gp能有这么复杂。对Q?/span>start里面的帮助文档还没用呢Q下ơ肯定得用上。其实你在做q个试的时候都是数着步数的,因ؓ你想看看和上ơ相比,qY件最快的使用方式有多大差别,对,每次你都?/span>sample来数你开始的步伐了吗Q?/span>
q是?/span>cmd里的操作和输出,不是很有意义Q仅作ؓ一U完整性脓q?/span>
C:"Documents and Settings"yys>cd E:"Program Files"IzPack"bin
C:"Documents and Settings"yys>e:
E:"Program Files"IzPack"bin>compile install.xml
.:: IzPack - Version 4.1.0 ::.
< compiler specifications version: 1.0 >
- Copyright (c) 2001-2008 Julien Ponge
- Visit http://izpack.org/ for the latest releases
- Released under the terms of the Apache Software License version 2.0.
-> Processing : install.xml
-> Output : install.jar
-> Base path : .
-> Kind : standard
-> Compression : default
-> Compr. level: -1
-> IzPack home : .
Adding resource: IzPack.uninstaller
Setting the installer information
Setting the GUI preferences
Adding langpack: eng
Adding resource: flag.eng
Adding langpack: fra
Adding resource: flag.fra
Adding resource: LicencePanel.licence
Adding resource: InfoPanel.info
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/HelloPanel.jar
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/InfoPanel.jar
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/LicencePanel.jar
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/TargetPanel.jar
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/PacksPanel.jar
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/InstallPanel.jar
Adding content of jar: file:/E:/Program%20Files/IzPack/lib/standalone-compiler.j
ar!/bin/panels/FinishPanel.jar
Building installer jar: E:"Program Files"IzPack"bin"install.jar
[ Begin ]
Copying the skeleton installer
Copying 7 files into installer
Merging 7 jars into installer
Writing 3 Packs into installer
Writing Pack 0: Base
Writing Pack 1: Docs
Writing Pack 2: Sources
[ End ]
Build time: Thu Oct 30 20:08:24 CST 2008
E:"Program Files"IzPack"bin>
?/span>cmd输出的你能看到我用的命o是刚才写的Q就那么一条,然后输出它打包的q程Q?/span>xml配置有问题的话,׃~译不过厅R?br /> 同样izpack是个y的开源YӞ用大部分用java写的Q离不开java环境Q打出的包就一jar文gQ比起installsheildȝ多了Q但问题也来了,客户要安装你的Y件就要安装jdkQ以后我们会解决q问题?br /> 下节看看我们的结果ƈ单研I一下要配置的xml?/span>
launch4j也是开源YӞ所以可以上http://sourceforge.net下蝲。安装好后,?/span>C:"Program Files下你安装jdk?/span>java文g名改了,再打开launch4j发现打不开Q证明这个Y件是依赖java环境的,它本w包打得很小。改?/span>java文g夹的名字Q再打开Q发现启动界面很漂亮Q你的Y件也有望成这样了。上ơ有一Ҏ讲清楚,jsmooth?/span>jre路径那就是告?/span>jsmooth用此jre?/span>jvmQ大安知道class的运行靠的就?/span>jvmQ,而不用再搜寻jdk{中?/span>jvm?/span>Jsmooth中一栏是jvm查找序是在不自己带上jre的情况下搜寻客户机的jvm的策略。这儿同栯jreq行同样的动作。好Q现在就让我们来生成一个不依赖客户?/span>java环境?/span>exe?/span>
前提准备Q?/span>
?/span>jdk中的jre复制C要打包的文g夹(我的?/span>Java2DQ下Q要打包?/span>jar,q儿?/span>jdk?/span>demo中的Java2Demo.jarQ一?/span>bmp囄j2d.bmp,一?/span>ico文gQ如?/span>
你需要填写的也很?/span>
1. ?/span>basic?/span>jar一栏找C?/span>jar,安照同\径给你的exe起名字。在Icon一栏找C?/span>ico
2.?/span>jre一栏写?/span>./jre表示当前路径Q?/span>launch4j聪明多了Q记住你的\径)
3.?/span>Splash一栏的Enable splash screen 打上勾,下面选出你的bmp,估计你Y件的启动旉Q然后填上比q个旉大的旉。如下ؓ5。这?/span>bmp是你的启动画面
可以生成了(其实你可以不?/span>bmp,icoq成,软g可还贴心Q。点dh的轮图q成了。结果如?br />
多了一?/span>exe是你所需?span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">点击q到启动画面,如下
下次?/span>izpack。开始比较有意思了?/span>
写这文章一是ؓ了完整性,再一个一步一步过来比较自Ӟ先学会简单易用的Q思维也容易清晰。很多的文章也免不了千篇一例,q来看看我的见解q是值得的,呵呵?/span>
其实q款Y件真是一堆一堆的漏洞Q但q是勉强可用Q作为开源打包的入门软g。通常都用JSmooth 0.9.9-7版本的,看看下面的图
是我们的beansoft译的,上次说过了,有问题可要请教他呀?/span>
先别急着动手Q先说学完咱们可以做啥,一个是你可以生成一个有exe壳的jar应用E序Q其实就是在你的包里多了一?/span>exe文gQ其他的依旧在,不要以ؓ拿着你的exe出ȝ了,q了你的这?/span>jarQ你的这个文件结构就玩完了,甚至q了你本地机的java环境没戏了。你不能要求客户都安?/span>jdk吧,人家不想搞研发。别灰心Q看完本文你q道怎么qjava环境了(只是q本地?/span>java环境哦,不是q你的那个包结构,q没那么的)。虽然是很简单,可当初我也是不了解。几个h没弄出一个脱?/span>java环境的,加上Y件经不vy躏Q然后不得不怪Y件是中文版的Q还动手?/span>c来生?/span>exe调用巨大?/span>jdkQ然后脱L地机java。{了一圈回来才理解了怎么回事。之所以说它经不vy躏是你不要对着上面的按钮哗啦哗啦的点,一不小心,它不反应了,你的从新打开Q次数开多了Q说不定每次都不让你看某些界面。除非你重启。或者正常的某个功能是不理你了Q或者生成的时候忘了敲?/span>exe而不得不从来。所以蹂w对软g和你都没好长?/span>
下面分两部分Q一部分教你用最单的方式打出exeQ体会一下成功的快乐。一部分教你加上jreq本地?/span>java?/span>
前提Q你?/span>java环境Q安装了jdkQ?/span>
最单的exe打包
其实最单的打包只要写三个地方就可以打了Q而你可以对着一?/span>jar文g打成你?/span>exeQ有一点就是你要知?/span>jar里的ȝ是谁Q不知道q个概念问问别人。那么开始吧Q讲的算l了?/span>
打开l色软g中的jsmoothgen.exe开始了。这里以?/span>Java2Demo.jarZQ在jdk?/span>demo里有Q我׃提供了)Q?/span>
1. 点击 骨架Q选择Windowed Wrapper (表示打的?/span>windows下的Q左Ҏ从上C׃打包程Q很多都没用上,也没l究。移动鼠标到“Q?#8221;Qh家告诉你该做什么。别太兴奋?/span>)
2.点击 可执行文Ӟ点击U线处的按钮扑ֈ你的jar文gQ记得换后缀?/span>exe,如图
3. 点击 应用E序Q点?/span>classpash 那一栏右边的加号Q把你的jar加进去,然后点击U线处,弹出的框中只有一个文件夹Q双L开Q直到找C的主cMؓ止,点击 select 定,如下两幅图所C?br />
开始生成吧Q点dh里的轮,弹出对话框,路径选在你打包的文g下(好像是必ȝQ,写上名称Q如图,定卛_在你的包里看到这?/span>exe?br />
打开E:"Java2D看到
其中j2d.jsmooth?/span>jsmooth生成的配|文ӞJava2Demo.exe即你要的Q点击试试,看能不能用,然后?/span>exe剪切到其他地方看能不能用Q放回来Q把C:"Program Files下的java文gҎ名字Q注意把用到java虚拟机的软g都关了)Q看exeq能不能用。(别忘了改回来。)
l果清楚?/span>exe不能?/span>jar分离了,也不能离开jvm环境Q下面我们就让他q本机java环境。这Lexe可以为我们进一步的打包奠定基础Q所有它是有用的?/span>
准备条gQ把?/span>jdk下的jre考到?/span>jar同一个目录,要图标就扑֥一?#8220;.ico”的文件三个放同一文g夹下
下面开始:
1. 和刚才一P点击 骨架Q选择Windowed Wrapper?/span>
2. 点击 可执行文Ӟ扑ֈ你的jar文gQ记得换后缀?/span>exeQ同h到包里准备好?/span>ico文g如下?/span>
q就看到一?/span>bug了,我选的ico它显CZؓ另外一个以前同名的icoQ即使我改了它的名,其实q有另一点oZ舒服的,是每次点击找\径都从头找,它不帮你C。另外注意一Ҏ一来点了保存,?/span>j2d.exe.jsmooth存到?/span>e:"java2D下,所以你看到的\径很短,
3.和刚才一h?/span>jar攑ֈclasspath里,然后扑ֈȝQ(注意序性)
4.点击 jvm选项 Q在jvm捆绑包那选上复选框Q点U线处找?/span>jre路径q确定。如?br />
选择?/span>jre
5.开始生成吧Q点dh里的轮,弹出对话框,路径选在你打包的文g下,写上名称Q如图,
定生成
exe是你要的Q这里要抱歉一下,它的bug所_ico用的不是我当前的ico,但也没什么媄响?/span>J2d.bmp什么的是不必要的,下一节才用上Q点?/span>exe看,?/span>C:"Program Files下的java文gҎ名字再试一ơ,噢,可以了,呵呵?/span>Jsmooth 的其他选项p各位补充了Q俺不太明白了,谢谢各位。下ơ讲launch4j打包?/span>