文章目录
- openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包
- 概述
- 笔记
- 前置任务
- 克隆代码库
- 切到最新的tag
- 清理干净
- 编译工程
- 关掉旧工程
- 打开已经克隆好的openpnp2.2工程
- 将IDEA的SDK配置为openjdk23
- 切换中英文UI
- 设置JAVA编译器
- 构建工程
- 跑测试用例
- 单步调试下断点
- 导出工程的JAR包
- 安装install4j
- 配置打包要用的到JRE
- 制作openpnp2.2需要的JRE包
- 打开install4j工程,检查选项
- 在file中加入.jar包
- 在launchers中,指定.jar包和主类
- 手工选择自己打好的JRE包
- 打包
- 运行安装好的openpnp, 看是否正常?
- 最好弄个完整的install4j安装版
- END
openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包
概述
openpnp升级了,当前版本2.2.
以前不会打包,只能将需要的class和jar包都收集起来用,模拟IDEA的调试环境。
虽然弄的openpnp散装的打包能用,但是看着好低级,好土。
这次看了一下官方文档,现在代码编译环境和打包都比以前友好。
试了一下,编译打包都成功。
笔记
前置任务
如果环境不在了,按照以前的笔记 openpnp - 软件调试环境搭建 将基本环境搭好。
克隆代码库
git@github.com:openpnp/openpnp.git
迁出到本地 D:\3rd\openpnp_prj\openpnp-official\openpnp
切到最新的tag
当前tag是2.2,切过去,建立一个分支
清理干净
我前面做过试验了,如果还用这个目录做试验,要clean掉未归档的文件,将变动过的文件用revert恢复到2.2tag的原始状态。
编译工程
IDEA版本为 2023.2.4
关掉旧工程
打开IDEA, 如果当前有别的工程,先将工程关了。
打开已经克隆好的openpnp2.2工程
此工程已经切到了2.2的tag
如果项目在IDEA的列表中,直接点击就打开了。
如果怕弄错了,将最近的项目从IDEA开始界面移除
如果是新位置的项目,就直接用IDEA打开项目的文件夹就行,应该是当作maven项目打开了。
打开工程后,如果是第一次用IDEA打开刚克隆好的库,会分析依赖库啥的,等右下角提示消失。
将IDEA的SDK配置为openjdk23
我现在用的是 openjdk-23.0.2_windows-x64_bin.zip => D:\tools\java\openjdk-23.0.2_windows-x64_bin\jdk-23.0.2
如果已经有了openjdk23, 就选为当前SDK.
如果是第一次换SDK, 就点击"添加SDK", 指到从install4j处偷来备份解压的openjdk23的目录就行。
点击确定,退出设置框。
重新编译工程,跑测试用例,这时,就没有任何红色的警告了。
切换中英文UI
如果操作IDEA时,和找到的资料对不上,可以随时切换中英文(需要重启IDEA).
设置JAVA编译器
如果编译时找不到java.exe, 将SDK重新删掉,再加一遍SDK就好了(我用的是自动侦测到的SDK, 实际就是我指定的那个SDK)
不需要在win10环境变量中配置JAVA_HOME那3个全局环境变量。
构建工程
跑测试用例
应该是都能编译测试过。
如果看到红色警告,先不管,这是因为没有用官方指定的openjdk23的最新版本引起的。后面换了就好了。
单步调试下断点
在main函数和自己关心的底层实现函数代码行处下断点,再点击单步运行就可以了,等断点命中,就可以开始学习了。
导出工程的JAR包
导出JAR包前,需要保证工程全部编译通过,全部测试都跑通。
将依赖都加入输出
如果只是为了打包,现在就可以关掉IDEA了。
安装install4j
install4j需要的最小版本为10.0.5.
从网上能找到的install4j学习版本都是试用版,即使输入了正确的序列号,打好包的程序也会弹框(“试用版…”).
可以从官方下载最新的install4j-v10.0.9, 这时install4j 10.x的最后一个版本, 然后用注册机产生序列号,虽然还是试用版,但是不影响打包的步骤。
配置打包要用的到JRE
拿openpnp2.2来举例。
openpnp2.2需要openjdk23的最新版本。
下载地址 https://jdk.java.net/23/
下载之后为 openjdk-23.0.2_windows-x64_bin.zip
解压开,释放到 D:\tools\java\openjdk-23.0.2_windows-x64_bin
制作openpnp2.2需要的JRE包
如果不自己下载JDK包,自己做JRE包。
让install4j没找到IRE包之后,去下载去自动做JRE包,时间很长。如果要用install4j给不同的工程打包,时间浪费严重。
且install4j自己去找的openjdk并不是官方的版本,有时从远程下载的列表中并没有最新的JDK版本。
且网络通讯质量不受控,让install4j从远程下载指定版本可能会失败。
打开install4j-10.0.9
JDK路径选为 D:\tools\java\openjdk-23.0.2_windows-x64_bin\jdk-23.0.2,就是自己下载解压的那个目录
这里的参数都不用改,最后生成的IRE包会给出路径名称。
模块要编辑一下,选择全部模块。
然后等IRE包制作完,默认的生成路径在APPDATA目录下。
C:\Users\me\AppData\Local\install4j\v10\jres\windows-amd64-23.0.2.tar.gz
打开install4j工程,检查选项
openpnp2给出的打包工程,也许jia包名称和JRE包都和自己的环境不同。需要检查。
openpnp2的install4j工程文件位置 => D:\3rd\openpnp_prj\openpnp-official\openpnp\OpenPnP.install4j
在file中加入.jar包
保存工程后,新加入的文件就变成了相对路径(相对工程的路径)。
在launchers中,指定.jar包和主类
这步是指定启动的类, e.g. jar包中的main(), 否则打包后会找不到主类报错。
openpnp工程一直将jar包命名为openpnp-gui-0.0.1-alpha-SNAPSHOT.jar, 好奇怪。
编辑这个项,换成我们刚作好的openpnp-gui.jar.
手工选择自己打好的JRE包
我用的JDK是win64的,我也只打一种win64的包。
打包时,要选前面打好的JRE包,否则运行时缺依赖
选择我们已经打好的JRE包.
打包
只编译winx64版本。
编译中出了2个警告,是install4j的问题,不是打包有问题。
看到打包后的exe大小,有418MB. 依赖应该打全了。
打包成功了,去打包发布目录中看一下。
将打包好的程序安装过程试一下,成功的。
安装程序有评估版提示,这是因为没有授权,用的install4j试用版的缘故,不管。如果有需求,就买license(7000RMB).
默认安装后的路径为 C:\Program Files\openpnp
我这里为了做实验,装到了新目录 C:\Program Files\openpnp2
如果有旧版配置文件,自己先删除一下那个旧配置目录
运行安装好的openpnp, 看是否正常?
可以正常跑起来了,说明编译打包都成功。
最好弄个完整的install4j安装版
install4j弄的真黑,试用版打包出来的exe也有弹框。
将工具本身搞个neg窗口提醒用户买东西就行了。为啥要将做好的安装程序和安装好的程序加neg窗口?
这可是动了用户本身的东西啊,算不算侵犯用户隐私啊. 有点招人恨啊。
做学习版注册机的大神,应该不是经常用install4j的用户。否则他不可能留着那2个neg弹窗。技术流的大神注意不到这个。
现在网上好多学习版的注册机, 都是将注册码算法搞定,就完事了。其实有可能被作者骗了。
e.g. install4j, 不知道花钱的用户是有另外的正版软件下载链接;还是程序是一个,但是有暗桩。
假设程序是一个,那么注册机的作者就是被软件作者耍了。有可能注册码判断到了报错弹窗的后面,还有判断逻辑。或者到了做exe时,又有对注册码的详细判断。
这个程序没壳的,可以用IDA和IDEA的JarEditor插件相结合,调试修改所有的本地程序的反汇编和JAVA的类实现,且能回写。
如果有刚需,只要花时间弄清改在哪里改,不存在改不动的问题。
看了安装程序.exe和包装好的java启动.exe, 都是在winMain处简单的neg弹窗。但是具体jinstall4j实现在哪里加的这2句代码,如果有刚需确实可以找一下。