当前位置: 首页 > news >正文

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”团队脱颖而出&#xf…...

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...

数据库高安全—审计追踪:传统审计统一审计

书接上文数据库高安全—角色权限:权限管理&权限检查,从权限管理和权限检查方面解读了高斯数据库的角色权限,本篇将从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读。 4 审计追踪 4.1 传统审计 审计内容的记录方式通…...

机器学习 - 需要了解的条件概率、高斯分布、似然函数

似然函数是连接数据与参数的桥梁,通过“数据反推参数”的逆向思维,成为统计推断的核心工具。理解它的关键在于区分“参数固定时数据的概率”与“数据固定时参数的合理性”,这种视角转换是掌握现代统计学和机器学习的基础。 一、在学习似然函…...

Spring Boot Web 入门

目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块,它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南,涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...