赞
踩
想了解openpnp的实现, 先搭建一个调试环境.
实验目的: 能单步调试openpnp源码, 能将openpnp在调试器IDE中跑起来.
依赖的原始文档为openpnp wiki文档和openpnp工程的自带文档.
一切实验都从官方站点开始 https://openpnp.org/
在官方站点上点击Code, 转到github上的openpnp工程页 https://github.com/openpnp/openpnp
找到工程git rep url(https://github.com/openpnp/openpnp.git), 克隆到一个有github访问权限的git托管站点.
再从git托管站点克隆到本地.
由于网络不好, 且openpnp工程自带的文档是不够的, 需要将openpnp wiki工程也克隆到本地
https://github.com/openpnp/openpnp.wiki.git
openpnp_wiki\Developers-Guide.md
openpnp工程是java写的, 官方推荐2种IDE : Eclipse, IntelliJ IDEA
通过文档描述可知, IntelliJ IDEA用起来相当简单.
而且看文档和后来实验(编译openpnp工程), openpnp需要JDK12以下版本, 否则测试用例中opencv报错. 但是非专业的java程序员, 很难知道JDK各个靠谱版本从哪里下载. 但是IntelliJ IDEA中自带JDK版本选择和下载, 这功能太好用了.
那就选 IntelliJ IDEA(后来通过自己使用, 也发现IntelliJ IDEA用起来是相当简明, 相当友好, 不愧是大部分java开发者都在用的IDE, 群众的眼睛雪亮的).
从IDEA官方下载安装程序 https://www.jetbrains.com/idea/download/#section=windows
选择旗舰版下载, 下载到本地为 ideaIU-2022.3.exe
将旗舰版的授权改为长期学习, 网上资料很多, 照着做就好.
新建一个空项目, 填写项目名称和工程位置. 点击创建.
新建从版本控制来的项目
项目的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项目的所有测试用例.
找到openpnp项目的main文件, 选择运行(如果要单步调试, 就选择调试)
可以看到openpnp跑起来了, 如果选择了中文语言, 程序的界面文字都变成中文了.
在打开工程后, 才能设置工程选项
这个可选, 配置一下好些(e.g. 不需要自动编译), 不配置亦可.
记录一下改过的配置. 记录的不全, 如果需要其他的IDEA设置, 网上资料很多, 跟着设置就好.
在此实验基础上, 就可以学习和膜拜openpnp项目了.
工程结构等项目相关的知识点, 需要进一步看开发文档, wiki, git log.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。