openpnp - 程序发布包的制作

openpnp - 程序发布包的制作

概述

openpnp自带了intall4j的安装脚本.
在这里插入图片描述
官方说明这是intall4j 8.x的工程.
下载了intall4j 8.x(找不到注册码, 只能是90天试用版) 和 10.x(可以找到注册码, 作为全功能学习版来用), 都可以编译openpnp.intall4j(需要禁止JRE的包含)
在这里插入图片描述
可以正常打包.
在这里插入图片描述

打好的包安装正常.
运行安装好的openpnp.exe, 报错, 好像是依赖的jar包没打进去.
在这里插入图片描述

还需要自己指定一些选项, 将依赖的java库包含进去才行.
但是作为install4j的新手, 不太会用,
看了install4j 10.x的帮助文件, 挺高级的, 挺复杂的. 看着头疼. 放弃治疗. 如果以后有刚需, 再研究一下.

我只想改完openpnp后, 能在自己多台计算机上正常跑起来就行, 要求不高.
最终采用模拟IDEA IDE命令行运行程序的方法, 搞定. 还是那句话, 自己能接受就是全部.

看网上资料, 可以用IDEA IDE来打包. 以后再实验.
既然自己已经琢磨出可以让openpnp正常运行的方法, 不继续折腾了. 这次就先这么用.

笔记

程序发布 - 简易打包

运行IDEA
在这里插入图片描述
打开工程
在这里插入图片描述
等待IDEA对工程的预处理都完成
在这里插入图片描述

编译
在这里插入图片描述

运行
在这里插入图片描述
此时, 和代码对应的openpnp程序已经启动了, 功能正常.
观察启动程序的命令行
在这里插入图片描述
单击这个启动命令行的文本, 文本就展开为一行.
在这里插入图片描述
将这个文本拷贝到记事本中, 用VSCODE打开, 观察一下.

E:\tools\java\amazon-corretto-11-x64-windows-jdk\jdk11.0.17_8\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3\lib\idea_rt.jar=63209:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3\bin" -Dfile.encoding=UTF-8 -classpath D:\my_openpnp\openpnp_github\target\classes;C:\Users\me\.m2\repository\net\java\dev\jna\jna\5.8.0\jna-5.8.0.jar;C:\Users\me\.m2\repository\org\jfree\jfreechart\1.5.3\jfreechart-1.5.3.jar;C:\Users\me\.m2\repository\com\github\sarxos\webcam-capture\0.3.10\webcam-capture-0.3.10.jar;C:\Users\me\.m2\repository\com\nativelibs4java\bridj\0.6.2\bridj-0.6.2.jar;C:\Users\me\.m2\repository\org\slf4j\slf4j-api\1.7.2\slf4j-api-1.7.2.jar;C:\Users\me\.m2\repository\org\ostermiller\utils\1.07.00\utils-1.07.00.jar;C:\Users\me\.m2\repository\commons-codec\commons-codec\1.6\commons-codec-1.6.jar;C:\Users\me\.m2\repository\org\simpleframework\simple-xml\2.7.1\simple-xml-2.7.1.jar;C:\Users\me\.m2\repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;C:\Users\me\.m2\repository\stax\stax\1.2.0\stax-1.2.0.jar;C:\Users\me\.m2\repository\xpp3\xpp3\1.1.3.3\xpp3-1.1.3.3.jar;C:\Users\me\.m2\repository\commons-io\commons-io\2.7\commons-io-2.7.jar;C:\Users\me\.m2\repository\com\fazecast\jSerialComm\2.10.3\jSerialComm-2.10.3.jar;C:\Users\me\.m2\repository\org\swinglabs\swingx\swingx-all\1.6.4\swingx-all-1.6.4.jar;C:\Users\me\.m2\repository\org\openpnp\opencv\4.5.1-2\opencv-4.5.1-2.jar;C:\Users\me\.m2\repository\com\google\code\gson\gson\2.2.3\gson-2.2.3.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-transcoder\1.7\batik-transcoder-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\fop\0.94\fop-0.94.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\xmlgraphics-commons\1.2\xmlgraphics-commons-1.2.jar;C:\Users\me\.m2\repository\org\apache\avalon\framework\avalon-framework-api\4.3.1\avalon-framework-api-4.3.1.jar;C:\Users\me\.m2\repository\org\apache\avalon\framework\avalon-framework-impl\4.3.1\avalon-framework-impl-4.3.1.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-awt-util\1.7\batik-awt-util-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-bridge\1.7\batik-bridge-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-anim\1.7\batik-anim-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-css\1.7\batik-css-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-ext\1.7\batik-ext-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-parser\1.7\batik-parser-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-script\1.7\batik-script-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-js\1.7\batik-js-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-dom\1.7\batik-dom-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-gvt\1.7\batik-gvt-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-svg-dom\1.7\batik-svg-dom-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-svggen\1.7\batik-svggen-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-util\1.7\batik-util-1.7.jar;C:\Users\me\.m2\repository\org\apache\xmlgraphics\batik-xml\1.7\batik-xml-1.7.jar;C:\Users\me\.m2\repository\xml-apis\xml-apis\1.3.04\xml-apis-1.3.04.jar;C:\Users\me\.m2\repository\xml-apis\xml-apis-ext\1.3.04\xml-apis-ext-1.3.04.jar;C:\Users\me\.m2\repository\com\google\zxing\javase\2.2\javase-2.2.jar;C:\Users\me\.m2\repository\com\google\guava\guava\14.0.1\guava-14.0.1.jar;C:\Users\me\.m2\repository\com\jgoodies\jgoodies-forms\1.8.0\jgoodies-forms-1.8.0.jar;C:\Users\me\.m2\repository\com\jgoodies\jgoodies-common\1.8.0\jgoodies-common-1.8.0.jar;C:\Users\me\.m2\repository\org\tros\l2fprod-properties-editor\1.0.3\l2fprod-properties-editor-1.0.3.jar;C:\Users\me\.m2\repository\org\tros\l2fprod-common-annotations\1.0.3\l2fprod-common-annotations-1.0.3.jar;C:\Users\me\.m2\repository\xalan\xalan\2.7.2\xalan-2.7.2.jar;C:\Users\me\.m2\repository\xalan\serializer\2.7.2\serializer-2.7.2.jar;C:\Users\me\.m2\repository\de\onvif\onvif-java-lib\2016-03-16\onvif-java-lib-2016-03-16.jar;C:\Users\me\.m2\repository\org\python\jython-standalone\2.7.1\jython-standalone-2.7.1.jar;C:\Users\me\.m2\repository\org\beanshell\bsh\2.0b5\bsh-2.0b5.jar;C:\Users\me\.m2\repository\org\tinylog\tinylog\1.3\tinylog-1.3.jar;C:\Users\me\.m2\repository\com\google\zxing\core\3.3.0\core-3.3.0.jar;C:\Users\me\.m2\repository\com\github\kennedyoliveira\pastebin4j\1.2.1\pastebin4j-1.2.1.jar;C:\Users\me\.m2\repository\com\mashape\unirest\unirest-java\1.4.9\unirest-java-1.4.9.jar;C:\Users\me\.m2\repository\org\apache\httpcomponents\httpclient\4.5.2\httpclient-4.5.2.jar;C:\Users\me\.m2\repository\org\apache\httpcomponents\httpcore\4.4.4\httpcore-4.4.4.jar;C:\Users\me\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.1\httpasyncclient-4.1.1.jar;C:\Users\me\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.4\httpcore-nio-4.4.4.jar;C:\Users\me\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\me\.m2\repository\org\json\json\20160212\json-20160212.jar;C:\Users\me\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\me\.m2\repository\org\jdesktop\beansbinding\1.2.1\beansbinding-1.2.1.jar;C:\Users\me\.m2\repository\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;C:\Users\me\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\me\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\me\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\me\.m2\repository\org\openpnp\openpnp-capture-java\0.0.22\openpnp-capture-java-0.0.22.jar;C:\Users\me\.m2\repository\com\nativelibs4java\jnaerator-runtime\0.12\jnaerator-runtime-0.12.jar;C:\Users\me\.m2\repository\com\nativelibs4java\ochafik-util\0.12\ochafik-util-0.12.jar;C:\Users\me\.m2\repository\javax\xml\bind\jaxb-api\2.2.11\jaxb-api-2.2.11.jar;C:\Users\me\.m2\repository\com\sun\xml\bind\jaxb-core\2.2.11\jaxb-core-2.2.11.jar;C:\Users\me\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.11\jaxb-impl-2.2.11.jar;C:\Users\me\.m2\repository\javax\activation\activation\1.1.1\activation-1.1.1.jar;C:\Users\me\.m2\repository\javax\xml\ws\jaxws-api\2.3.0\jaxws-api-2.3.0.jar;C:\Users\me\.m2\repository\javax\xml\soap\javax.xml.soap-api\1.4.0\javax.xml.soap-api-1.4.0.jar;C:\Users\me\.m2\repository\com\formdev\flatlaf\1.0\flatlaf-1.0.jar;C:\Users\me\.m2\repository\com\formdev\flatlaf-extras\1.0\flatlaf-extras-1.0.jar;C:\Users\me\.m2\repository\com\formdev\svgSalamander\1.1.2.4\svgSalamander-1.1.2.4.jar org.openpnp.Main

这是一行的可运行命令, 很长.
可以看出以下内容:

  • openpnp程序要用到的java程序全路径.
  • javaagent, 这个是IDEA IDE再用, 正常程序运行用不到.
  • 程序编码为UTF8
  • classpath, 除了程序目录中的class目录, 还有程序目录之外的依赖库中的jar包
  • openpnp本身的程序入口实现.

尝试了一下, 将javaagent去掉, 程序不依赖IDEA IDE是可以正常跑起来的.
然后就想试试, 将命令行中的所有内容, 都整理到一个目录, 然后写一个.bat来运行openpnp, 成功了.
整理好的目录如下:
在这里插入图片描述
将工程中的D:\my_openpnp\openpnp_github\target\classes目录, 拷贝到自己的发布目录, 名称还是classes
将C:\Users\me.m2\repository目录拷贝到自己的发布目录, 名称改为m2_repository
将E:\tools\java\amazon-corretto-11-x64-windows-jdk\jdk11.0.17_8目录拷贝到发布目录, 名称为jdk11.0.17_8
然后在VSCODE下, 将IDEA运行程序的脚本整理一下(路径都是相对路径, 都指向发布目录下的依赖目录), 去掉javaagent, 内容如下:

.\jdk11.0.17_8\bin\java.exe  -Dfile.encoding=UTF-8 -classpath .\classes;.\m2_repository\net\java\dev\jna\jna\5.8.0\jna-5.8.0.jar;.\m2_repository\org\jfree\jfreechart\1.5.3\jfreechart-1.5.3.jar;.\m2_repository\com\github\sarxos\webcam-capture\0.3.10\webcam-capture-0.3.10.jar;.\m2_repository\com\nativelibs4java\bridj\0.6.2\bridj-0.6.2.jar;.\m2_repository\org\slf4j\slf4j-api\1.7.2\slf4j-api-1.7.2.jar;.\m2_repository\org\ostermiller\utils\1.07.00\utils-1.07.00.jar;.\m2_repository\commons-codec\commons-codec\1.6\commons-codec-1.6.jar;.\m2_repository\org\simpleframework\simple-xml\2.7.1\simple-xml-2.7.1.jar;.\m2_repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;.\m2_repository\stax\stax\1.2.0\stax-1.2.0.jar;.\m2_repository\xpp3\xpp3\1.1.3.3\xpp3-1.1.3.3.jar;.\m2_repository\commons-io\commons-io\2.7\commons-io-2.7.jar;.\m2_repository\com\fazecast\jSerialComm\2.10.3\jSerialComm-2.10.3.jar;.\m2_repository\org\swinglabs\swingx\swingx-all\1.6.4\swingx-all-1.6.4.jar;.\m2_repository\org\openpnp\opencv\4.5.1-2\opencv-4.5.1-2.jar;.\m2_repository\com\google\code\gson\gson\2.2.3\gson-2.2.3.jar;.\m2_repository\org\apache\xmlgraphics\batik-transcoder\1.7\batik-transcoder-1.7.jar;.\m2_repository\org\apache\xmlgraphics\fop\0.94\fop-0.94.jar;.\m2_repository\org\apache\xmlgraphics\xmlgraphics-commons\1.2\xmlgraphics-commons-1.2.jar;.\m2_repository\org\apache\avalon\framework\avalon-framework-api\4.3.1\avalon-framework-api-4.3.1.jar;.\m2_repository\org\apache\avalon\framework\avalon-framework-impl\4.3.1\avalon-framework-impl-4.3.1.jar;.\m2_repository\org\apache\xmlgraphics\batik-awt-util\1.7\batik-awt-util-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-bridge\1.7\batik-bridge-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-anim\1.7\batik-anim-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-css\1.7\batik-css-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-ext\1.7\batik-ext-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-parser\1.7\batik-parser-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-script\1.7\batik-script-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-js\1.7\batik-js-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-dom\1.7\batik-dom-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-gvt\1.7\batik-gvt-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-svg-dom\1.7\batik-svg-dom-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-svggen\1.7\batik-svggen-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-util\1.7\batik-util-1.7.jar;.\m2_repository\org\apache\xmlgraphics\batik-xml\1.7\batik-xml-1.7.jar;.\m2_repository\xml-apis\xml-apis\1.3.04\xml-apis-1.3.04.jar;.\m2_repository\xml-apis\xml-apis-ext\1.3.04\xml-apis-ext-1.3.04.jar;.\m2_repository\com\google\zxing\javase\2.2\javase-2.2.jar;.\m2_repository\com\google\guava\guava\14.0.1\guava-14.0.1.jar;.\m2_repository\com\jgoodies\jgoodies-forms\1.8.0\jgoodies-forms-1.8.0.jar;.\m2_repository\com\jgoodies\jgoodies-common\1.8.0\jgoodies-common-1.8.0.jar;.\m2_repository\org\tros\l2fprod-properties-editor\1.0.3\l2fprod-properties-editor-1.0.3.jar;.\m2_repository\org\tros\l2fprod-common-annotations\1.0.3\l2fprod-common-annotations-1.0.3.jar;.\m2_repository\xalan\xalan\2.7.2\xalan-2.7.2.jar;.\m2_repository\xalan\serializer\2.7.2\serializer-2.7.2.jar;.\m2_repository\de\onvif\onvif-java-lib\2016-03-16\onvif-java-lib-2016-03-16.jar;.\m2_repository\org\python\jython-standalone\2.7.1\jython-standalone-2.7.1.jar;.\m2_repository\org\beanshell\bsh\2.0b5\bsh-2.0b5.jar;.\m2_repository\org\tinylog\tinylog\1.3\tinylog-1.3.jar;.\m2_repository\com\google\zxing\core\3.3.0\core-3.3.0.jar;.\m2_repository\com\github\kennedyoliveira\pastebin4j\1.2.1\pastebin4j-1.2.1.jar;.\m2_repository\com\mashape\unirest\unirest-java\1.4.9\unirest-java-1.4.9.jar;.\m2_repository\org\apache\httpcomponents\httpclient\4.5.2\httpclient-4.5.2.jar;.\m2_repository\org\apache\httpcomponents\httpcore\4.4.4\httpcore-4.4.4.jar;.\m2_repository\org\apache\httpcomponents\httpasyncclient\4.1.1\httpasyncclient-4.1.1.jar;.\m2_repository\org\apache\httpcomponents\httpcore-nio\4.4.4\httpcore-nio-4.4.4.jar;.\m2_repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;.\m2_repository\org\json\json\20160212\json-20160212.jar;.\m2_repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;.\m2_repository\org\jdesktop\beansbinding\1.2.1\beansbinding-1.2.1.jar;.\m2_repository\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;.\m2_repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;.\m2_repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;.\m2_repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;.\m2_repository\org\openpnp\openpnp-capture-java\0.0.22\openpnp-capture-java-0.0.22.jar;.\m2_repository\com\nativelibs4java\jnaerator-runtime\0.12\jnaerator-runtime-0.12.jar;.\m2_repository\com\nativelibs4java\ochafik-util\0.12\ochafik-util-0.12.jar;.\m2_repository\javax\xml\bind\jaxb-api\2.2.11\jaxb-api-2.2.11.jar;.\m2_repository\com\sun\xml\bind\jaxb-core\2.2.11\jaxb-core-2.2.11.jar;.\m2_repository\com\sun\xml\bind\jaxb-impl\2.2.11\jaxb-impl-2.2.11.jar;.\m2_repository\javax\activation\activation\1.1.1\activation-1.1.1.jar;.\m2_repository\javax\xml\ws\jaxws-api\2.3.0\jaxws-api-2.3.0.jar;.\m2_repository\javax\xml\soap\javax.xml.soap-api\1.4.0\javax.xml.soap-api-1.4.0.jar;.\m2_repository\com\formdev\flatlaf\1.0\flatlaf-1.0.jar;.\m2_repository\com\formdev\flatlaf-extras\1.0\flatlaf-extras-1.0.jar;.\m2_repository\com\formdev\svgSalamander\1.1.2.4\svgSalamander-1.1.2.4.jar org.openpnp.Main

将整理过的脚本命名为run_jave_prog.cmd.
此时, 运行run_jave_prog.cmd, 就可以正常启动自己修改过的openpnp程序.
在这里插入图片描述

备注

这样的简易发布有个缺点, 发布包的体积有点大, 不过无所谓, 都是自己再用, 不差那点磁盘空间.
在这里插入图片描述

程序发布 - 用install4j来打包

等以后有刚需了再研究, 头疼.

备注

如果在IDEA中运行良好
如果脱离IDEA运行时,出现一些奇怪的问题(如下)

看到控制台有报错信息
串口选择页点不进去

这时要考虑是不是没有将最新的依赖包都拷贝全.
此时,将jdk11.0.17_8目录,m2_repository目录,classes目录都重新删除,拷贝一下。

程序发布 - 用install4j来打包 - ok

已经整明白了,可以用install4j打出一个安装包,运行时,只需要运行openpnp.exe
且已经通过逆向修正了试用版弹框的问题。
请参阅 - openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值