做安装包的关键在于三方的交互,用户输入,InstallAnywhere 的变量,和 Java 拓展部分。
先看一个类:
/* 功能: 测试 postgres数据库 连接是否成功 */ import java.sql.Connection; import java.sql.DriverManager; import com.zerog.ia.api.pub.CustomCodeRule; public class DBConnectionTest extends CustomCodeRule { // 重写 evaluateRule方法 @Override public boolean evaluateRule() { // 获取用户输入 String db_ip = ruleProxy.substitute("$EA_DB_IP$"); String db_port = ruleProxy.substitute("$EA_DB_PORT$"); String db_account =ruleProxy.substitute("$EA_DB_ACCOUNT$"); String db_password =ruleProxy.substitute("$EA_DB_PASSWORD$"); // 非空验证 // return true 表示验证不通过, DB_TEST_RESULT 向 InstallAnywhere 传递验证结果 if ("".equals(db_ip)) { ruleProxy.setVariable("DB_TEST_RESULT", "IP地址不能为空。"); return true; } if ("".equals(db_port)) { ruleProxy.setVariable("DB_TEST_RESULT", "端口号不能为空。"); return true; } if ("".equals(db_account)) { ruleProxy.setVariable("DB_TEST_RESULT", "登录名不能为空。"); return true; } if ("".equals(db_password)) { ruleProxy.setVariable("DB_TEST_RESULT", "密码不能为空。"); return true; } // 拼接 url String url = "jdbc:postgresql://" + db_ip + ":" + db_port; // 测试连接 Connection connection = null; try { Class.forName("org.postgresql.Driver"); connection = DriverManager.getConnection(url, db_account, db_password); } catch (Exception e) { ruleProxy.setVariable("DB_TEST_RESULT", "测试连接失败: " + e.toString()); return true; } finally { if (connection != null) { try { connection.close(); } catch (Exception e) { // } } } return false; } }
先需要导入一个包 IAClasses.zip,在 InstallAnywhere 的根目录下可以找到。
就像之前提到的规则一样,CustomCodeRule 用于现实自定义的规则,需要实现 evaluateRule 这个方法。
然后,编译这个类生成 class 文件,并把 class 文件打包为 jar 文件。
依赖的 Zip 和 Jar 先不管。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pre-Install
顾名思义,就是在执行安装之前做一些事情,比如获取用户输入。
通过点击 Add Action ,添加一个 Get User Input - Advanced 的 Action。
点击 Add Textfield, 插入四个文本框,用于获取需要信息。
输入 Label 标签和 Result Variable 用 $$ 括起来。
可以回过头看之前的代码,就是通过这个变量名来获得用户输入的。
接着插入一个 Show Message Dialog Action,用于反馈测试连接的结果。
将 Label 设置为你想要的变量名,记得在 java 代码中也是同样的, 并选择 Return Previous Panel 选项。
切换到 Rules Tab,添加一个 Evaluate Custom Rule,对,这个就是之前实现的类。
Choose Jar 文件,填写 Class 要带上包名,我这没用包。
在 Configure Dependencies 中添加依赖。
最关键的一点,class 文件需要用 1.6 的版本(我试过 1.7 和 1.8 都不行)来编译,也许是这个版本的 InstallAnywhere 太老了。
这个费了我很多时间,而 IA 本身也没任何提示信息。
然后,就可以构建项目,试一下了。