• 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
    
    
    • 1
    • 2

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

    • 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
    
    • 1

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

    备注

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

    程序发布 - 用install4j来打包

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

    END

  • 相关阅读:
    健康中国·营养先行|2022主动健康与临床营养高峰论坛圆满落幕
    最新CLion + STM32 + CubeMX 开发环境搭建
    保研经历分享(一)
    MySQL Create table as select无法执行
    【Java】一文认识IO操作流
    spring cloud 2021 gateway 报错503 Service Unavailable
    cocoaPods管理之后工程结构变化
    Java日志系列——日志门面,阿里日志规约,SLF4J
    Hugging News #0912: Hugging Face 2 人入选时代周刊全球百大 AI 人物
    笔记本电脑切换Fn功能键
  • 原文地址:https://blog.csdn.net/LostSpeed/article/details/134073656