openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包
文章目录
- 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句代码,如果有刚需确实可以找一下。
END
相关文章:
openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包
文章目录 openpnp2.2 - 环境搭建 - 编译 调试 打包概述笔记前置任务克隆代码库切到最新的tag清理干净编译工程关掉旧工程打开已经克隆好的openpnp2.2工程将IDEA的SDK配置为openjdk23 切换中英文UI设置JAVA编译器 构建工程跑测试用例单步调试下断点导出工程的JAR包安装install…...
OpenCV:图像修复
目录 简述 1. 原理说明 1.1 Navier-Stokes方法(INPAINT_NS) 1.2 快速行进方法(INPAINT_TELEA) 2. 实现步骤 2.1 输入图像和掩膜(Mask) 2.2 调用cv2.inpaint()函数 2.3 完整代码示例 2.4 运行结果 …...
QT全局所有QSS样式实时切换
方法如下: void loadQss(int qssType) {QString name;if (qssType 1)name ":/qss/day.qss";elsename ":/qss/night.qss";QFile file(name);file.open(QFile::ReadOnly);QString qss;qss file.readAll();qApp->setStyleSheet(qss);file.…...
MySQL三大版本的演进
三大版本的演进 文章目录 三大版本的演进一:5.6版本(大跃进时期)1:支持只读事务2:innodb存储引擎增强2.1:缓冲池刷盘策略优化2.2:BufferPool缓冲池预热 3:新增Performance_Schema库监…...
利用 IMU 估计人体关节轴向和位置 —— 论文推导
Title: 利用 IMU 估计人体关节轴向和位置 —— “Joint axis and position estimation from inertial measurement data by exploiting kinematic constraints” —— 论文推导 文章目录 I. 论文回顾II. 铰接关节的约束1. 铰接关节约束的原理2. 铰接关节约束的梯度3. 铰接关节约…...
脚本一键生成管理下游k8s集群的kubeconfig
一、场景 1.1 需要管理下游k8s集群的场景。 1.2 不希望使用默认的cluster-admin权限的config. 二、脚本 **重点参数: 2.1 配置变量。 1、有单独namespace的权限和集群只读权限。 2、自签名的CA证书位置要正确。 2.2 如果配置错误,需要重新…...
数据库系统概念第六版记录 三
外码约束(Foreign Key Constraint) 外码(Foreign Key, FK)是关系数据库中的一个约束,它用于保证表之间的引用完整性。外码的值必须: 要么存在于被引用表的主键列中,要么为空(NULL&…...
YOLOv11-ultralytics-8.3.67部分代码阅读笔记-files.py
files.py ultralytics\utils\files.py 目录 files.py 1.所需的库和模块 2.class WorkingDirectory(contextlib.ContextDecorator): 3.def spaces_in_path(path): 4.def increment_path(path, exist_okFalse, sep"", mkdirFalse): 5.def file_age(path__fi…...
微信小程序案例1——制作猫眼电影底部标签导航栏
文章目录 一、项目步骤1 新建一个无AppID的movie项目2将准备好的底部标签导航图标拷贝到movie项目下面(将图标文件夹image放到项目文件夹里)3 打开App.json配置文件,在pages数组里添加4个页面路径:电影“pages/movie/movie”、影院“pages/cinema/cinema…...
【大数据技术】搭建完全分布式高可用大数据集群(Kafka)
搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…...
【服务器知识】如何在linux系统上搭建一个nfs
文章目录 NFS网络系统搭建**1. 准备工作****2. 服务器端配置****(1) 安装 NFS 服务****(2) 创建共享目录****(3) 配置共享规则****(4) 生效配置并启动服务****(5) 防火墙配置** **3. 客户端配置****(1) 安装 NFS 客户端工具****(2) 创建本地挂载点****(3) 挂载 NFS 共享目录***…...
图片画质增强:轻松提升画质
前言: 今天给大家推荐一款非常实用的图片画质增强软件,它无需联网即可使用,完全离线操作,这款软件基于先进的深度学习技术,能够对模糊图片进行强大的高清处理,效果令人惊艳。 图片画质增强:一…...
vscode快速接入deepseek 实践操作
背景说明 在deepseek快速火爆的情况下,也想自己体验一把。看看在vscode中集成进来,方便平时的脚本开发。对于年纪大的人还是非常方便的。 操作过程 安装continue 打开vscode进入扩展市场,搜索安装 安装完成就是上面的样子,会…...
mapbox进阶,添加绘图扩展插件,绘制圆形
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…...
Cursor 与多语言开发:全栈开发的利器
引言 全栈开发要求开发者跨越前端、后端、数据库甚至数据科学等多个技术领域,而不同技术栈往往需要切换工具和思维方式。Cursor 作为一款 AI 驱动的智能编程助手,凭借其对 20 编程语言 和主流框架的深度支持,正在成为全栈开发的“瑞士军刀”…...
2025 CCF BDCI|“基于TPU平台的OCR模型性能优化”一等奖作品
2024年12月,中国计算机学会在海南博鳌成功举办了第十二届CCF大数据与计算智能大赛(简称2024 CCF BDCI)。本届比赛的算能赛道吸引了1748名选手报名,经过激烈角逐,北京航空航天大学的“常务副SOTA”团队脱颖而出…...
FPGA的IP核接口引脚含义-快解
疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...
数据库高安全—审计追踪:传统审计统一审计
书接上文数据库高安全—角色权限:权限管理&权限检查,从权限管理和权限检查方面解读了高斯数据库的角色权限,本篇将从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读。 4 审计追踪 4.1 传统审计 审计内容的记录方式通…...
机器学习 - 需要了解的条件概率、高斯分布、似然函数
似然函数是连接数据与参数的桥梁,通过“数据反推参数”的逆向思维,成为统计推断的核心工具。理解它的关键在于区分“参数固定时数据的概率”与“数据固定时参数的合理性”,这种视角转换是掌握现代统计学和机器学习的基础。 一、在学习似然函…...
Spring Boot Web 入门
目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块,它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南,涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
