最近做了一个桌面程序,用到了mysql数据库,最后要实现程序打包成安装文件。就java本身而言,这并没有什么难的,但因为有了mysql这个烂东西,让我研究打包就打了一个多周,而网上的有些方法,看似很详细,其实会遇到很多错误,以下是本人经过简化之后的步骤,不要问为什么,多打几遍你就知道了:
1.你要下载installanywhere,去Google上搜一下就有,还有破解方法(一定要破解,虽然不破解也能打包,但你会发现一段时间后就不能用了)。
2.要下载绿色版的mysql,一定要用绿色版的,否则会带来很多不必要的麻烦。搜一下csdn上就有。
3.把你要打包好的东西全部放在同一个文件夹下,我们暂且叫这个文件夹叫做abcde。其中,mysql绿色版解压后改名为mysql(不是必需的,只是为了书写方便),然后将mysql文件夹放在abcd目录下。
4.打开mysql,查看有没有一个叫做my.ini的文件,没有的话创建一个。我的my.ini内容如下:
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
basedir=D:/Program Files/CharacterWeb/MySQL
datadir=D:/Program Files/CharacterWeb/MySQL/data
default-character-set=utf8
最重要的是
basedir=D:/Program Files/CharacterWeb/MySQL
datadir=D:/Program Files/CharacterWeb/MySQL/data
这个会指导系统区注册你的mysql服务,不过最好改成如下形式:
basedir=$INSTALL_DIR$/MySQL
datadir=$INSTALL_DIR$/MySQL/data
$INSTALL_DIR$是installanywhere传的参数,即你的安装路径
5.打开installanywhere,新建一个基本模板,保存路径,点击下面的AdvancedDesigner(有两种形式,一种是向导形式的,一种是详细设置,这里我们用详细设计)
在project---info中写上自己的软件名(记住,这里面的大多数东西都是不用配置的),在project--Locales中选择安装语言。
6.如下图所示,点击AddFiles加入整理好的abcd文件夹下的所有文件夹和文件(不包括abcd文件夹本身)
点击一下SetClasspath,否则完成后将找不到程序的入口。右边还可以选择你的软件安装好后的图标。
7.下面的这一部分是重点,往往都会在这上面出错:
上面显示的一个个都是通过AddAction添加的行为,也就是安装过程中所要发生的一些事,比如使用前说明,mysql注册,mysql服务启动等等.下面是我测试成功的顺序,改变后可能会出错:
(1)新建一个ActionGroup,用来存放你新建的Action
(2)新建一个Execute Script/Bach file
里面然后再下面填充内容(直接拷贝就行了):
Comment: 删除服务执行文件项
Script: REG Delete HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Mysql /v ImagePath /f
(3)新建第二个Execute Script/Bach file
里面然后再下面填充内容(直接拷贝就行了):
Comment: MySQL注册
Script: Call "$USER_INSTALL_DIR$/MySQL/bin/mysqld.exe" -install Mysql --defaults-file="$USER_INSTALL_DIR$/MySQL/my.ini"
(4)新建第三个Execute Script/Bach file
里面然后再下面填充内容(直接拷贝就行了):
Comment: 添加服务执行文件项
Script: REG add HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MySQL /v ImagePath /t REG_EXPAND_SZ /d "$USER_INSTALL_DIR$/MySQL/bin/mysqld.exe /"--defaults-file=$USER_INSTALL_DIR$/MySQL/my.ini/" MySQL"
(5)新建startWindowsService
(8)最后一步,按图例选择即可,然后点击Build Project即可:
到这里基本上就完成了,点击TryInstaller试着安装一下。
另外,还有一个问题,有的同志喜欢打包前将数据也一块打进去,这样mysql就不用再导入数据了,有的人一定会想用脚本控制,我感觉太麻烦,脚本老是出错,所以我想了另一个办法,那就是先按上述方法安装好,用图形工具把数据倒入mysql,然后把安装好的目录下的mysql整个目录覆盖abcde下的mysql目录,再重新打一遍就ok了,这样用户安装完后数据就可以直接用了。
(本人新手,不足之处,多多指正)