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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【复现论文】DAVE

网站: GitHub - jerpelhan/DAVE 下载完以后,阅读 readme文件 新建终端,打印文件树,不包含隐藏文件: 命令:tree -I .* . ├── LICENSE ├── README.md ├── demo.py ├── demo_zero.py ├── mai…

GB/T28181 开源日记[8]:国标开发速知速会

服务端源代码 github.com/gowvp/gb28181 前端源代码 github.com/gowvp/gb28181_web 介绍 go wvp 是 Go 语言实现的开源 GB28181 解决方案,基于GB28181-2022标准实现的网络视频平台,支持 rtmp/rtsp,客户端支持网页版本和安卓 App。支持rts…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 **一、**自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成phpstudy中的数据库无法启动,这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#…

grafana面板配置opentsdb

新增面板: 这里add-panel: 如果不是想新增面板而是想新增一行条目,则点击convert to row: 在新增的面板这里可以看到选择数据源 Aggregator:聚合条件,区分下第一行和第二行的aggregator,第一个是对指标值的聚合&…

论文翻译学习:《DeepSeek-R1: 通过强化学习激励大型语言模型的推理能力》

摘要 我们介绍了我们的第一代推理模型 DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个通过大规模强化学习(RL)训练的模型,没有经过监督微调(SFT)作为初步步骤,展示了卓越的推理能力。通过强化…

【Uniapp-Vue3】从uniCloud中获取数据

需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…

【自然语言处理】TextRank 算法提取关键词(Python实现)

文章目录 前言PageRank 实现TextRank 简单版源码实现jieba工具包实现TextRank 前言 TextRank 算法是一种基于图的排序算法,主要用于文本处理中的关键词提取和文本摘要。它基于图中节点之间的关系来评估节点的重要性,类似于 Google 的 PageRank 算法。Tex…

免费windows pdf编辑工具

Epdf(完全免费) 作者:不染心 时间:2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器,目前仍在开发中。它提供了一系列实用的命令行选项,方便用户对 PDF …

星闪开发入门级教程之安装编译器与小项目烧录

系列文章目录 星闪开发入门级教程 好久不见,已经好几年没有发文章了,星闪-作为中国原生的新一代近距离无线联接技术品牌。我想着写点东西。为了适合新手,绝对小白文。 文章目录 系列文章目录前言一、Hispark Studio1.安装Hispark Studio2.安…

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException解决办法

1.问题描述 在编写完一个功能后,第一次启动这个模块的启动类时,报以下错误, 2.文件解决 检查了controller,service和mapper,均未发现有问题,核对了依赖也未发现依赖冲突 在网上也找了资料,有总结的比较好的: controller层service层dao层注解是否都使用正确?接口…

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…

信创数据库使用问题汇总

笔者工作中需要使用多种信创数据库,在使用过程中发现一些问题,现记录如下。 1 OceanBase-Oracle租户的Python连接方式 用Python连接OB数据库的mysql租户可以使用连接mysql的包,但连接oracle租户是没有官方包的,必须使用基于jdbc…

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…

Web3 与区块链:开启透明、安全的网络新时代

在这个信息爆炸的时代,我们对网络的透明性、安全性和隐私保护的需求日益增长。Web3,作为新一代互联网的代表,正携手区块链技术,引领我们走向一个更加透明、安全和去中心化的网络世界。本文将深入探讨 Web3 的基本概念、区块链技术…

[Android] 全球网测-版本号4.3.8

[Android] 全球网测 链接:https://pan.xunlei.com/s/VOIV5G3_UOFWnGuMQ_GlIW2OA1?pwdfrpe# 应用介绍 "全球网测"是由中国信通院产业与规划研究所自主研发的一款拥有宽带测速、上网体验和网络诊断等功能的综合测速软件。APP突出六大亮点优势&#xff1a…

AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型

文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架,正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…

windows 安装nvidaia驱动和cuda

安装nvidaia驱动和cuda 官网搜索下载驱动 https://www.nvidia.cn/drivers/lookup/ 这里查出来的都是最高支持什么版本的cuda 安装时候都默认精简就行 官网下载所需版本的cuda包 https://developer.nvidia.com/cuda-toolkit-archive 安装成功但是nvcc -V 失败 &#xff0c…

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO(通用输入输出引脚) 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断(EXTI) 深入中断(内部机制及原理) 外部中断/事件控…

动态规划(01背包问题)

目录 题目内容题目分析未装满情况思路一思路二代码实现滚动数组优化优化代码 恰好装满情况代码实现滚动数组优化 题目内容 你有一个背包,最多能容纳的体积是V。 现在有n个物品,第i个物品的体积为Vi​,价值为Wi (1)求这个背包至多能…

力扣.270. 最接近的二叉搜索树值(中序遍历思想)

文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的中序遍历) 本题的难点在于可能存在多个答案,并且要返回最小的那一个,为了解决这个问题,我门则要利用上二叉搜索树中序遍历为有序序列的特性,具体到代码中&a…