openpnp - 软件调试环境搭建

概述

想了解openpnp的实现, 先搭建一个调试环境.
实验目的: 能单步调试openpnp源码, 能将openpnp在调试器IDE中跑起来.

笔记

依赖的原始文档为openpnp wiki文档和openpnp工程的自带文档.

openpnp官方站点

一切实验都从官方站点开始 https://openpnp.org/

将openpnp工程克隆到本地

在官方站点上点击Code, 转到github上的openpnp工程页 https://github.com/openpnp/openpnp
找到工程git rep url(https://github.com/openpnp/openpnp.git), 克隆到一个有github访问权限的git托管站点.
再从git托管站点克隆到本地.

将openpnp的wiki工程克隆到本地

由于网络不好, 且openpnp工程自带的文档是不够的, 需要将openpnp wiki工程也克隆到本地
https://github.com/openpnp/openpnp.wiki.git

查看openpnp开发指南

openpnp_wiki\Developers-Guide.md

根据openpnp开发指南搭建openpnp开发环境

IDE的选择

openpnp工程是java写的, 官方推荐2种IDE : Eclipse, IntelliJ IDEA
通过文档描述可知, IntelliJ IDEA用起来相当简单.
而且看文档和后来实验(编译openpnp工程), openpnp需要JDK12以下版本, 否则测试用例中opencv报错. 但是非专业的java程序员, 很难知道JDK各个靠谱版本从哪里下载. 但是IntelliJ IDEA中自带JDK版本选择和下载, 这功能太好用了.
那就选 IntelliJ IDEA(后来通过自己使用, 也发现IntelliJ IDEA用起来是相当简明, 相当友好, 不愧是大部分java开发者都在用的IDE, 群众的眼睛雪亮的).

IntelliJ IDEA学习版的安装

从IDEA官方下载安装程序 https://www.jetbrains.com/idea/download/#section=windows
选择旗舰版下载, 下载到本地为 ideaIU-2022.3.exe
将旗舰版的授权改为长期学习, 网上资料很多, 照着做就好.

引入openpnp工程

在这里插入图片描述
新建一个空项目, 填写项目名称和工程位置. 点击创建.

在这里插入图片描述
在这里插入图片描述
新建从版本控制来的项目
项目的git url 是从github上的openpnp项目克隆到有访问github仓库权限的git托管服务器中的克隆后的url. 点击克隆.
在这里插入图片描述
在这里插入图片描述
输入自己在托管服务器上的账户信息, 点击登录.
在这里插入图片描述
IDEA右下角可以看到openpnp仓库克隆进度, 等待完成.

在这里插入图片描述
项目克隆到本地后, 在弹框中勾选项目, 点击信任项目.

在这里插入图片描述
选择在当前窗口打开项目.

在这里插入图片描述
工程刚打开时, EA右下角显示正在解析工程依赖项, 等待解析完成.
在这里插入图片描述
可以选择升级工程的依赖项, 我没选择升级.

在这里插入图片描述
工程刚引入时, JDK用的是环境变量JAVA_HOME中指定的那个最新的版本, 这个JDK版本不合适, 现在模拟第一次上手openpnp项目时的流程. 哪不合适就调整哪里, 直到工程正常使用.

openpnp文档中有提到, 必须通过所有测试用例, 才能提交代码到仓库.
既然这是个发布的git库版本, 作者们已经调试好了, 那我们先试试是否这个克隆来的工程能通过所有测试.
在这里插入图片描述
在工程节点上右击, 选择运行所有测试.
在这里插入图片描述
可以看到, 有很多测试错误.
看报错信息, 大概猜到是JDK版本不合适.
openpnp文档中有说明, JDK版本要15以下才行.
在这里插入图片描述
如果不是JDK15以下, 就需要调整代码.
现在在IDEA中添加JDK15
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择JDK版本为15, 在下拉列表中选择可用的JDK15版本.
在这里插入图片描述
IDEA右下角有进度提示, 等待提示完成.
这个速度有点慢, 我下载JDK15时, 等着可以完成(对于新手, 软件或操作慢点都不怕, 就怕操作中断了, 完不成). 如果完不成(网络原因), 可以自己下载JDK, 解压, 在IDEA中手工添加JDK版本. 这个下面再记录(因为这个JDK15也是不好使的)
等JDK15下载完.
指定工程使用的JDK为JDK15.
在这里插入图片描述
再次运行所有测试用例
在这里插入图片描述
虽然通过了所有测试, 但是拉动右边的输出信息, 可以看到工程中自带的opencv, 只能运行在JDK12以下.
现在将添加JDK12以下的版本.
在这里插入图片描述
可以看到IDEA中并没有JDK12的下载, 只能下载JDK11.
在这里插入图片描述
我选择的是Amazon Correto 11.0.17, 然后点击下载.
在这里插入图片描述
这个下载速度巨慢, 而且再苦苦等待后, 进度为98%时, 就下载失败了.
决定在IDEA中手工指定JDK11.
在官网找到了 Amazon Correto 11.0.17 的下载地址. https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
在这里插入图片描述
下载winx64, winx86的非安装版本到本地.
在这里插入图片描述
先用64位版本的JDK11试试, 解开 amazon-corretto-11-x64-windows-jdk
在这里插入图片描述
JDK11的路径位 E:\tools\java\amazon-corretto-11-x64-windows-jdk\jdk11.0.17_8
在IDEA中手工指定JDK11
在这里插入图片描述
在这里插入图片描述
点击确定,等待JDK11引入完成.
指定工程JDK版本位JDK11
在这里插入图片描述
再次运行所有测试
在这里插入图片描述
可以看到在JDK11下, 所有测试都通过了.
而且出现的唯一的一段警告, 出现在正式测试信息的顶部, 和工程无关.
看看这5句报警信息

WARNING: An illegal reflective access operation has occurred
// 发生了非法的反射访问操作
// 低版本JDK中允许反射访问, 高版本中不建议使用反射访问. 反射访问不安全, 不是错误.
// 这个是JDK本身的问题, 不是问题.

WARNING: Illegal reflective access by nu.pattern.OpenCV$SharedLoader (file:/C:/Users/chenx/.m2/repository/org/openpnp/opencv/4.5.1-2/opencv-4.5.1-2.jar) to field java.lang.ClassLoader.usr_paths
// 这个也是高版本JDK警告反射访问绕过了JDK正常的成员变量访问机制
// 这个是JDK本身的问题, 不是问题.

WARNING: Please consider reporting this to the maintainers of nu.pattern.OpenCV$SharedLoader
// 这句说, 将上述2个警告, 报告给opencv项目的维护者
// 这个不是问题.

WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
// 这句说 可以使用 --illegal-access=warn 选项, 进制对非法反射访问进行警告, 因为这只是不安全, 但是不是错误.
// 就像我们在高版本VS中使用旧式CRT库函数时, 也会有警告, 必须加上编译选项, 才不会对旧函数产生不安全的警告.
// 所以说, 这句也不是问题

WARNING: All illegal access operations will be denied in a future release
// 在未来的版本中,将拒绝所有非法访问操作
// JDK新版本中, 将不允许非法的反射访问.
// 这也不是问题.

到此, 我们使用JDK11, 成功运行了openpnp项目的所有测试用例.

在IDEA中, 运行openpnp主程序

在这里插入图片描述
找到openpnp项目的main文件, 选择运行(如果要单步调试, 就选择调试)
在这里插入图片描述
可以看到openpnp跑起来了, 如果选择了中文语言, 程序的界面文字都变成中文了.

配置IntelliJ IDEA(可选)

在打开工程后, 才能设置工程选项
这个可选, 配置一下好些(e.g. 不需要自动编译), 不配置亦可.
记录一下改过的配置. 记录的不全, 如果需要其他的IDEA设置, 网上资料很多, 跟着设置就好.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

备注

在此实验基础上, 就可以学习和膜拜openpnp项目了.
工程结构等项目相关的知识点, 需要进一步看开发文档, wiki, git log.

更换IDEA版本

ideaIU-2023.2.4.exe
在这里插入图片描述

全局替换工程中的回车

打包时,会检查回车必须为LINUX的回车。
如果根据报错,一个一个改,很麻烦。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打包

在这里插入图片描述

install4j的安装

在这里插入图片描述

openpnp需要的install4j是8.0版本的

https://www.ej-technologies.com/install4j/download8
下载后为 install4j_windows-x64_8_0_11.exe

注册机可以找一个10.0的版本,EJTechnologiesInstall4j_jb51.rar, 里面有8.0的注册机。
在这里插入图片描述

L-I8-TEAM BTCR#3013835-3vgwwww3vvuwww#48347
不确定注册码是否和计算机绑定,我这次生成的注册码如上。

用Install4j打开工程文件
在这里插入图片描述

只打包x64版本的安装包
在这里插入图片描述
打包后的位置
在这里插入图片描述
在这里插入图片描述
因为install4j做的安装程序需要jave环境。所以安装时,需要将JRE包和安装程序一起拷贝到目标计算机。
在这里插入图片描述
测试openpnp打包后的安装
在干净虚拟机或真机上,拷贝安装程序和JRE包。
在这里插入图片描述
运行 OpenPnP-windows-x64-develop
因为干净计算机中没有java环境,install4j做的安装程序让我们自己定位JRE位置
在这里插入图片描述
浏览到JRE目录位置,点击确定,继续安装。
在这里插入图片描述
安装完后,运行开始菜单中的openpnp的快捷方式。
在这里插入图片描述
在这里插入图片描述
可以看到,程序版本是我们自己打包的,且openpnp程序运行正确。

备注

在此基础上,就可以自己改工程,自己打包。
如果做了啥修改,就git归档。
为了方便,可以将远程github的url的库,转成本地git库,自己玩起来就方便很多。远程库转本地git库可以参考(git - 做远程url的本地库)

END

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐