文章目录
- openpnp - 程序发布包的制作
- 概述
- 笔记
- 程序发布 - 简易打包
- 备注
- 程序发布 - 用install4j来打包
- END
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来打包
等以后有刚需了再研究, 头疼.