{"id":268,"date":"2023-12-01T17:56:45","date_gmt":"2023-12-01T09:56:45","guid":{"rendered":"https:\/\/bbstone.cn\/?p=268"},"modified":"2026-05-11T14:24:38","modified_gmt":"2026-05-11T06:24:38","slug":"javafx%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e6%89%93%e5%8c%85","status":"publish","type":"post","link":"https:\/\/bbstone.cn\/?p=268","title":{"rendered":"JavaFX\u5e94\u7528\u7a0b\u5e8f\u6253\u5305"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-center\">\u2014\u2014\u4f7f\u7528jlink\u548cjpackage<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u6458\u8981<\/strong><\/h2>\n\n\n\n<p>\u793a\u4f8b\u6f14\u793a\u57fa\u4e8ejava21\u548cJavaFX 21\uff0c\u4f7f\u7528jdk\u7684jlink\u548cjpackage\u547d\u4ee4\u6253\u5305&nbsp;FireX AI&nbsp;\u684c\u9762\u7a0b\u5e8f\u53d1\u5e03\u5305\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/tooki.top\/\" target=\"_blank\" rel=\"noreferrer noopener\">FireX AI \u4e0b\u8f7d\u4f53\u9a8c<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u8fd0\u884c\u73af\u5883<\/strong><\/h2>\n\n\n\n<p>JDK: Java21 [\u5177\u4f53\u7248\u672c\uff1aOpenJDK\u00a0Temurin-21.0.1+12 (build 21.0.1+12-LTS)]<\/p>\n\n\n\n<p>JavaFX: JavaFX 21 [\u5177\u4f53\u7248\u672c\uff1ajavafx-sdk-21.0.1 \u548c javafx-jmods-21.0.1]<\/p>\n\n\n\n<p>\u6253\u5305\u547d\u4ee4\uff1ajlink&nbsp;\u548c&nbsp;jpackage<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u57fa\u672c\u6982\u5ff5<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u4ec0\u4e48\u662f&nbsp;jlink\uff1f<\/strong><\/h3>\n\n\n\n<p>\u5b98\u65b9\u5b9a\u4e49\uff1a<a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/tools\/jlink.html\"><u>https:\/\/docs.oracle.com\/en\/java\/javase\/11\/tools\/jlink.html<\/u><\/a><\/p>\n\n\n\n<p>You can use the&nbsp;jlink&nbsp;tool to assemble and optimize a set of modules and their dependencies into a custom runtime image.<\/p>\n\n\n\n<p>\u4ece\u5b9a\u4e49\u53ef\u77e5\uff0c\u4f7f\u7528jlink\u5de5\u5177\uff0c\u53ef\u4ee5\u5c06\u4e00\u7ec4\u6a21\u5757\u53ca\u5176\u4f9d\u8d56\u9879\uff0c\u7ec4\u88c5\u548c\u4f18\u5316\u5230\u81ea\u5b9a\u4e49\u8fd0\u884c\u65f6\u6620\u50cf\u4e2d\u3002<\/p>\n\n\n\n<p>\u8bf4\u4eba\u8bdd\u5c31\u662f\uff1a\u4f7f\u7528&nbsp;jlink&nbsp;\u547d\u4ee4\uff0c\u53ef\u4ee5\u7ec4\u88c5\u5b9a\u5236\u6a21\u5757\u5316Java&nbsp;\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u955c\u50cf\u3002\u5b83\u5305\u542b\u4e86\u57fa\u7840\u8fd0\u884c\u65f6\uff08\u5373JRE\uff09 \u548c\u4f60\u81ea\u5df1\u7684\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n\n\n\n<p>\u90a3\u4e48\u4e3a\u4ec0\u4e48\u9700\u8981\u7ec4\u88c5\u548c\u5b9a\u5236\u8fd0\u884c\u65f6\u955c\u50cf\u5462\uff1f<\/p>\n\n\n\n<p>\u56e0\u4e3a\uff0c<\/p>\n\n\n\n<p>\u4e00\u3001\u6211\u4eec\u4e0d\u5f97\u4e0d\u8fd9\u6837\uff1a\u4ece Java9 \u63a8\u51fa\u6a21\u5757\u5316\u540e\uff0cJava \u5b98\u65b9\u53ea\u6709\u4e00\u4e2aJDK\u5b89\u88c5\u5305\u7684\u4e0d\u518d\u63d0\u4f9b\u5355\u72ec\u7684JRE\u4e86\u3002\u60f3\u8981\u6253\u5305\u81ea\u5e26JRE\u7684\u5e94\u7528\u7a0b\u5e8f\u5305\uff0c\u4e0d\u80fd\u518d\u7528Java9 \u4e4b\u524d\u7684\u65b9\u5f0f\u4e86\u3002\uff08Java8\uff1a\u600e\u4e48\u611f\u89c9\u662f\u5728\u8bf4\u6211\u5462\uff1f\uff09<\/p>\n\n\n\n<p>\u4e8c\u3001\u8fd9\u6837\u80fd\u5e26\u6765\u7684\u597d\u5904\uff1a<br>\u597d\u5904 1\uff1a\u53ef\u4ee5\u5927\u5927\u7f29\u5c0f\u6700\u7ec8\u7684\u5e94\u7528\u53d1\u5e03\u7a0b\u5e8f\u5305\u5927\u5c0f\uff0c\u5927\u7ea6\u4e00\u822c\u7f29\u5c0f 40%-50%\u5de6\u53f3\uff0c\u89c6\u4e0d\u540c\u7a0b\u5e8f\u6709\u6240\u4e0d\u540c\uff08\u7a0d\u540e\u7ec6\u8bf4\uff09\uff1b<br>\u597d\u5904 2\uff1a\u8fd0\u884c\u955c\u50cf\u53ef\u4ee5\u5b9a\u5236\u53ea\u5305\u62ec\u7528\u5230 jdk \u6a21\u5757\uff0c\u4e0d\u7528\u5230\u7684 jdk \u6a21\u5757\uff0c\u53ef\u4ee5\u5254\u9664\uff0c\u8fd9\u5728 java9 \u6a21\u5757\u5316\u4e4b\u524d\uff0c\u662f\u505a\u4e0d\u5230\u7684\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u4ec0\u4e48\u662f&nbsp;jpackage\uff1f<\/strong><\/h2>\n\n\n\n<p>\u751f\u6210\u9002\u5408\u4e3b\u673a\u7cfb\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u5305\uff0c\u6a21\u5757\u5316\u548c\u975e\u6a21\u5757\u5316\u7684\u5e94\u7528\u7a0b\u5e8f\u5747\u53ef\u7528\u3002<\/p>\n\n\n\n<p>\u7b80\u5355\u7684\u8bf4\uff0c\u901a\u8fc7&nbsp;jpackage&nbsp;\u53ef\u4ee5\u5c06\u5e94\u7528\u7a0b\u5e8f\u6253\u5305\u6210&nbsp;windows&nbsp;\u5e73\u53f0\u7684&nbsp;exe&nbsp;\u5b89\u88c5\u5305\uff0cmacos&nbsp;\u7684&nbsp;dmg\u6216&nbsp;pkg&nbsp;\u5b89\u88c5\u5305\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u6253\u5305\u6b65\u9aa4<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>\u7528&nbsp;jlink&nbsp;\u7ec4\u88c5\u548c\u5b9a\u5236\u8fd0\u884c\u65f6\u955c\u50cf\uff1a<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u547d\u4ee4\u793a\u4f8b<\/strong><\/h4>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export PATH_TO_FX_MODS=\/Users\/bbstone\/devenv\/openjfx-21.0.1\/javafx-jmods-21.0.1;\\\n\nexport FIREX_LIB=\/Users\/bbstone\/workdir\/FIREX_LIB;\\\n\njlink --module-path ${PATH_TO_FX_MODS}:${FIREX_LIB}\/modules \\\n\n&nbsp;&nbsp;--add-modules firex.gui \\\n\n&nbsp;&nbsp;--output \/Users\/bbstone\/workdir\/FIREX_LIB\/dist \\\n\n&nbsp;&nbsp;--launcher fireX=firex.gui\/cn.bbstone.firex.gui.FireXStarter \\\n\n&nbsp;&nbsp;--strip-debug<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u73af\u5883\u53d8\u91cf<\/strong><\/h4>\n\n\n\n<p>PATH_TO_FX_MODS\uff1ajavafx jmods&nbsp;\u7684\u4f4d\u7f6e<\/p>\n\n\n\n<p>javafx-jmods-21.0.1\u76ee\u5f55\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"283\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/image.png\" alt=\"\" class=\"wp-image-269\"\/><\/figure>\n\n\n\n<p>FIREX_LIB\uff1aFireX AI\u5e94\u7528\u7a0b\u5e8f\u7684&nbsp;jar&nbsp;\u4f4d\u7f6e<\/p>\n\n\n\n<p>FIREX_LIB\/modules\u76ee\u5f55\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1278\" height=\"996\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72471.png\" alt=\"\" class=\"wp-image-271\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u53c2\u6570\u8bf4\u660e<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>--module-path\uff1a\u6a21\u5757\u8def\u5f84\u3002\u5982\u679c\u672a\u6307\u5b9a\uff0c\u5c06\u4f7f\u7528 JDK \u7684 jmods \u76ee\u5f55\uff08\u5982\u679c\u5b58\u5728\u8be5\u76ee\u5f55\uff09\u3002\u5982\u679c\u6307\u5b9a\uff0c\u4f46\u5b83\u4e0d\u5305\u542b java.base \u6a21\u5757\uff0c\u5219\u5c06\u6dfb\u52a0 JDK \u7684 jmods \u76ee\u5f55\uff08\u5982\u679c\u5b58\u5728\u8be5\u76ee\u5f55\uff09\u3002\n--add-modules\uff1a\u9664\u4e86\u521d\u59cb\u6a21\u5757\u4e4b\u5916\u8981\u89e3\u6790\u7684\u6839\u6a21\u5757\u3002\n--output\uff1a\u8f93\u51fa\u8def\u5f84\u7684\u4f4d\u7f6e\uff08\u4e5f\u662fjpackage --runtime-image \u53c2\u6570\u9700\u8981\u6307\u5b9a\u7684\u4f4d\u7f6e\uff09\u3002\n--launcher &lt;\u540d\u79f0&gt;=&lt;\u6a21\u5757&gt;&#91;\/&lt;\u4e3b\u7c7b&gt;]\uff1a\u4e3a\u6a21\u5757\u548c\u4e3b\u7c7b\u6dfb\u52a0\u7ed9\u5b9a\u540d\u79f0\u7684\u542f\u52a8\u7a0b\u5e8f\u547d\u4ee4(\u5982\u679c\u6307\u5b9a) \u3002\n--strip-debug\uff1a\u53bb\u9664\u8c03\u8bd5\u4fe1\u606f\u3002<\/code><\/pre>\n\n\n\n<p>\u6ce8\u610f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4ee5\u4e0a\u547d\u4ee4\u6267\u884c\u9700\u8981\u5e94\u7528\u7a0b\u5e8f\u4f9d\u8d56\u7684 jar \u90fd\u662f\u6a21\u5757\u5316\u7684\uff0c\u5982\u679c\u6ca1\u6709\u6a21\u5757\u5316\uff0c\u9700\u8981\u505a\u8f6c\u6362\u3002<\/li>\n\n\n\n<li>\u5c06\u975e\u6a21\u5757\u5316\u7684 jar \u8f6c\u6362\u6210\u6a21\u5757\u5316\u7684 jar \u7684\u65b9\u6cd5\uff0c\u8bf7\u53c2\u8003\u9644\u5f55I\u3002<\/li>\n\n\n\n<li>\u6709\u5173 jlink\u547d\u4ee4\u7684\u53c2\u6570\u548c\u66f4\u591a\u7528\u6cd5\uff0c\u8bf7\u5728\u5b89\u88c5\u4e86 JDK \u7684\u7535\u8111\u8fd0\u884c\u547d\u4ee4 \u201cjlink -h\u201d\u8fdb\u884c\u67e5\u770b.\u6216\u67e5\u770b\u5b98\u65b9\u6587\u6863\uff1ahttps:\/\/docs.oracle.com\/en\/java\/javase\/11\/tools\/jlink.html<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.\u7528 jpackage \u5c06 jlink \u7ec4\u88c5\u7684\u8fd0\u884c\u65f6\u955c\u50cf\u6253\u5305\u6210 macos \u7684\u5b89\u88c5\u5305dmg \u548c pkg<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u547d\u4ee4\u793a\u4f8b<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>% cd \/Users\/bbstone\/workdir\/FIREX_LIB\n% jpackage  --runtime-image dist  --type pkg --name FireX-AI_macos-aarch64 --app-version 1.0.0 --module firex.gui\/cn.bbstone.firex.gui.FireXStarter \\\n  --java-options -Dprofiles.active=prod --icon \/Users\/bbstone\/workdir\/FIREX_LIB\/app\/logo.icns --vendor bbstone.cn<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u53c2\u6570\u8bf4\u660e<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>--runtime-image\uff1a\u4e0a\u9762\u7528 jlink \u7ec4\u88c5\u7684\u8fd0\u884c\u65f6\u955c\u50cf\u7684\u76ee\u5f55\uff0c\u4f8b\u5982\uff1adist\n--type\uff1a\u6839\u636e jpackage \u547d\u4ee4\u8fd0\u884c\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u6709\u4e0d\u540c\u7684\u503c\uff0cmacos \u6709\u6548\u503c\u4e3a\uff1aapp-image, dmg, pkg\u3002\n--name\uff1a\u6700\u7ec8\u6253\u5305\u7684\u540d\u5b57\uff08\u4e0d\u5305\u62ec\u7248\u672c\u53f7\uff09\n--app-version\uff1a\u7248\u672c\u53f7\uff08macos \u4e0a\u5f00\u5934\u4e0d\u80fd\u662f 0\uff0c\u4f8b\u5982\uff0c\u60f3\u8981\u8bbe\u7f6e\u7248\u672c\u4f4d0.3.0\u662f\u4e0d\u53ef\u4ee5\u7684\u5fc5\u987b&gt;0\u7684\u7248\u672c\u53f7\u5f00\u5934\uff09\n--module firex.gui\/cn.bbstone.firex.gui.FireXStarter\uff1a\u542f\u52a8\u7a0b\u5e8f\u7684 \u6a21\u5757\/\u7a0b\u5e8f\u5165\u53e3\n--java-options -Dprofiles.active=prod\uff1a\u8981\u4f20\u9012\u5230 Java \u8fd0\u884c\u65f6\u7684\u9009\u9879\uff0c\u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n--icon \/Users\/bbstone\/workdir\/FIREX_LIB\/app\/logo.icns\uff1a\u5e94\u7528\u7a0b\u5e8f\u5305\u56fe\u6807\u7684\u8def\u5f84\uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n--vendor bbstone.cn\uff1a\u5e94\u7528\u7a0b\u5e8f\u7684\u4f9b\u5e94\u5546<\/code><\/pre>\n\n\n\n<p>\u6ce8\u610f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6709\u5173 jpackage \u547d\u4ee4\u7684\u53c2\u6570\u548c\u66f4\u591a\u7528\u6cd5\uff0c\u8bf7\u5728\u5b89\u88c5\u4e86 JDK \u7684\u7535\u8111\u8fd0\u884c\u547d\u4ee4 \u201cjpackage -h\u201d\u8fdb\u884c\u67e5\u770b<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">MacOS \u5b89\u88c5\u672a\u7b7e\u540d\u7684 FireX AI \u5ba2\u6237\u7aef\u8fc7\u7a0b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b89\u88c5 DMG \u683c\u5f0f\u7684\u5b89\u88c5\u5305<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"972\" height=\"414\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/dmg-install01.png\" alt=\"\" class=\"wp-image-321\" style=\"width:389px;height:auto\"\/><\/figure>\n\n\n\n<p>\u5c06 FireX AI.app \u56fe\u6807\u62d6\u52a8\u5230 Applications \u6587\u4ef6\u5939\u8fdb\u884c\u5b89\u88c5\uff0c\u5f97\u5230\u63d0\u793a\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"526\" height=\"566\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72473.png\" alt=\"\" class=\"wp-image-282\" style=\"width:304px;height:auto\"\/><\/figure>\n\n\n\n<p><font face=\"\u5b8b\u4f53\" style=\"font-family: \u5b8b\u4f53; font-size: 10.5pt; color: rgb(0, 0, 0); text-align: justify; white-space-collapse: collapse;\">\u70b9\u51fb<\/font><font face=\"\u5b8b\u4f53\" style=\"font-family: \u5b8b\u4f53; font-size: 10.5pt; color: rgb(0, 0, 0); text-align: justify; white-space-collapse: collapse;\">\u201c\u597d\u201d\u6309\u94ae\u540e\uff0c\u5728\u201c\u5b89\u5168\u4e0e\u9690\u79c1\u201d\u4e2d\u770b\u5230\u5982\u4e0b\uff1a<\/font><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1340\" height=\"1178\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72474.png\" alt=\"\" class=\"wp-image-283\" style=\"width:419px;height:auto\"\/><\/figure>\n\n\n\n<p>\u70b9\u51fb\u201c\u4ecd\u8981\u6253\u5f00\u201d\uff0c\u518d\u63d0\u793a\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"526\" height=\"724\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72475.png\" alt=\"\" class=\"wp-image-284\" style=\"width:415px;height:auto\"\/><\/figure>\n\n\n\n<p>\u7ee7\u7eed\u70b9\u51fb\u201c\u6253\u5f00\u201d\u6309\u94ae\uff0c\u5373\u53ef\u6253\u5f00 FireX AI \u5ba2\u6237\u7aef\u3002\u81f3\u6b64\uff0cdmg \u683c\u5f0f\u7684FireX AI \u5b89\u88c5\u5b8c\u6210\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b89\u88c5 PKG \u683c\u5f0f\u7684\u5b89\u88c5\u5305<\/h3>\n\n\n\n<p>\u9f20\u6807\u53cc\u51fb \u201cFireX-AI_macos-aarch64-0.3.0 (2).pkg\u201d\u5b89\u88c5\uff0c\u5f97\u5230\u63d0\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"506\" height=\"536\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72476.png\" alt=\"\" class=\"wp-image-285\" style=\"width:372px;height:auto\"\/><\/figure>\n\n\n\n<p>\u63d0\u793a\u8eab\u4efd\u4e0d\u660e\u7684\u5f00\u53d1\u8005\uff0c\u5728\u201c\u5b89\u5168\u4e0e\u9690\u79c1\u201d\u8bbe\u7f6e\u91cc\uff0c\u770b\u5230\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1340\" height=\"1178\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72477.png\" alt=\"\" class=\"wp-image-286\" style=\"width:528px;height:auto\"\/><\/figure>\n\n\n\n<p>\u70b9\u51fb\u201c\u4ecd\u8981\u6253\u5f00\u201d\u6309\u94ae\uff0c\u5f97\u5230\u5982\u4e0b\u63d0\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"520\" height=\"628\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72478.png\" alt=\"\" class=\"wp-image-287\" style=\"width:342px;height:auto\"\/><\/figure>\n\n\n\n<p>\u70b9\u51fb\u201c\u6253\u5f00\u201d\u6309\u94ae\uff0c\u7ee7\u7eed\u5b89\u88c5<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1242\" height=\"894\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u72479.png\" alt=\"\" class=\"wp-image-288\" style=\"width:468px;height:auto\"\/><\/figure>\n\n\n\n<p>\u63a5\u4e0b\u6765\u6309\u7167\u5f15\u5bfc\u4e00\u6b65\u6b65\u5b89\u88c5\u5b8c\u5373\u53ef\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1250\" height=\"892\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u56fe\u724710.png\" alt=\"\" class=\"wp-image-289\" style=\"width:469px;height:auto\"\/><\/figure>\n\n\n\n<p>\u5728\u5e94\u7528\u7a0b\u5e8f\u79cd\u770b\u5230\u5982\u4e0b\u56fe\u6807\uff0c\u70b9\u51fb\uff0c\u5373\u53ef\u6253\u5f00 FireX AI\u5ba2\u6237\u7aef\u3002\u81f3\u6b64\uff0cpkg \u683c\u5f0f\u7684FireX AI \u5b89\u88c5\u5b8c\u6210\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"290\" src=\"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/app-logo.png\" alt=\"\" class=\"wp-image-322\" style=\"width:148px;height:auto\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u9644\u5f55&nbsp;I\uff1a\u975e\u6a21\u5757\u5316\u7684&nbsp;jar&nbsp;\u8f6c\u6362\u6210\u6a21\u5757\u5316<\/strong><\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u901a\u8fc7&nbsp;maven&nbsp;\u63d2\u4ef6moditect\u6f14\u793a\u5982\u4f55\u5c06hankcs&nbsp;lucene&nbsp;\u5206\u8bcd\u5668\uff0capache commons lang3\uff0chutool&nbsp;\u8f6c\u6362\u6210\u6a21\u5757\u7684&nbsp;jar\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;plugin&gt;\n    &lt;!-- https:\/\/github.com\/moditect\/moditect --&gt;\n    &lt;groupId&gt;org.moditect&lt;\/groupId&gt;\n    &lt;artifactId&gt;moditect-maven-plugin&lt;\/artifactId&gt;\n    &lt;version&gt;1.0.0.Final&lt;\/version&gt;\n    &lt;executions&gt;\n        &lt;execution&gt;\n            &lt;id&gt;add-module-infos&lt;\/id&gt;\n            &lt;phase&gt;generate-resources&lt;\/phase&gt;\n            &lt;goals&gt;\n                &lt;goal&gt;add-module-info&lt;\/goal&gt;\n            &lt;\/goals&gt;\n            &lt;configuration&gt;\n                &lt;overwriteExistingFiles&gt;true&lt;\/overwriteExistingFiles&gt;\n                &lt;outputDirectory&gt;${firex.lib}\/modules&lt;\/outputDirectory&gt;\n                &lt;modules&gt;\n                    &lt;module&gt;\n                        &lt;artifact&gt;\n                            &lt;groupId&gt;com.hankcs&lt;\/groupId&gt;\n                            &lt;artifactId&gt;hanlp&lt;\/artifactId&gt;\n                            &lt;version&gt;${hanlp.version}&lt;\/version&gt;\n                        &lt;\/artifact&gt;\n                        &lt;moduleInfoSource&gt;\n                            module com.hankcs.hanlp {\n                            requires java.logging;\n                            exports com.hankcs.hanlp;\n                            exports com.hankcs.hanlp.seg;\n                            exports com.hankcs.hanlp.seg.common;\n                            exports com.hankcs.hanlp.tokenizer;\n                            exports com.hankcs.hanlp.corpus.io;\n                            exports com.hankcs.hanlp.utility;\n                            exports com.hankcs.hanlp.corpus.tag;\n                            exports com.hankcs.hanlp.collection.trie.bintrie;\n                            }\n                        &lt;\/moduleInfoSource&gt;\n                    &lt;\/module&gt;\n                    &lt;module&gt;\n                        &lt;artifact&gt;\n                            &lt;groupId&gt;com.hankcs.nlp&lt;\/groupId&gt;\n                            &lt;artifactId&gt;hanlp-lucene-plugin&lt;\/artifactId&gt;\n                            &lt;version&gt;${hanlp-lucene-plugin.version}&lt;\/version&gt;\n                        &lt;\/artifact&gt;\n                        &lt;moduleInfoSource&gt;\n                            module hanlp.lucene.plugin {\n                            requires org.apache.lucene.core;\n                            requires com.hankcs.hanlp;\n                            exports com.hankcs.lucene;\n                            }\n                        &lt;\/moduleInfoSource&gt;\n                    &lt;\/module&gt;\n                    &lt;module&gt;\n                        &lt;artifact&gt;\n                            &lt;groupId&gt;org.apache.commons&lt;\/groupId&gt;\n                            &lt;artifactId&gt;commons-lang3&lt;\/artifactId&gt;\n                            &lt;version&gt;${commons-lang3.version}&lt;\/version&gt;\n                        &lt;\/artifact&gt;\n                        &lt;moduleInfoSource&gt;\n                            module org.apache.commons.lang3 {\n                            exports org.apache.commons.lang3;\n                            }\n                        &lt;\/moduleInfoSource&gt;\n                    &lt;\/module&gt;\n                    &lt;module&gt;\n                        &lt;artifact&gt;\n                            &lt;groupId&gt;cn.hutool&lt;\/groupId&gt;\n                            &lt;artifactId&gt;hutool-core&lt;\/artifactId&gt;\n                            &lt;version&gt;${hutool.version}&lt;\/version&gt;\n                        &lt;\/artifact&gt;\n                        &lt;moduleInfoSource&gt;\n                            module cn.hutool.core {\n                            exports cn.hutool.core.util;\n                            exports cn.hutool.core.date;\n                            exports cn.hutool.core.collection;\n                            }\n                        &lt;\/moduleInfoSource&gt;\n                    &lt;\/module&gt;\n                    &lt;module&gt;\n                        &lt;artifact&gt;\n                            &lt;groupId&gt;cn.hutool&lt;\/groupId&gt;\n                            &lt;artifactId&gt;hutool-crypto&lt;\/artifactId&gt;\n                            &lt;version&gt;${hutool.version}&lt;\/version&gt;\n                        &lt;\/artifact&gt;\n                        &lt;moduleInfoSource&gt;\n                            module cn.hutool.crypto {\n                            exports cn.hutool.crypto;\n                            }\n                        &lt;\/moduleInfoSource&gt;\n                    &lt;\/module&gt;\n                &lt;\/modules&gt;\n            &lt;\/configuration&gt;\n        &lt;\/execution&gt;\n    &lt;\/executions&gt;\n&lt;\/plugin&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u9644\u5f55&nbsp;II\uff1ajpackage&nbsp;\u7684\u53c2\u6570<\/strong><\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u5185\u5bb9\u662f\u5728&nbsp;MacOS&nbsp;\u4e0b\u7684&nbsp;GraalVM 21&nbsp;\u8fd0\u884c&nbsp;jpackage -h&nbsp;\u663e\u793a\u7684\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7528\u6cd5\uff1ajpackage &lt;options&gt;\n\n\u793a\u4f8b\u7528\u6cd5:\n--------------\n    \u751f\u6210\u9002\u5408\u4e3b\u673a\u7cfb\u7edf\u7684\u5e94\u7528\u7a0b\u5e8f\u5305\uff1a\n        \u5bf9\u4e8e\u6a21\u5757\u5316\u5e94\u7528\u7a0b\u5e8f\uff1a\n            jpackage -n name -p modulePath -m moduleName\/className\n        \u5bf9\u4e8e\u975e\u6a21\u5757\u5316\u5e94\u7528\u7a0b\u5e8f\uff1a\n            jpackage -i inputDir -n name \\\n                --main-class className --main-jar myJar.jar\n        \u4ece\u9884\u6784\u5efa\u7684\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\uff1a\n            jpackage -n name --app-image appImageDir\n    \u751f\u6210\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\uff1a\n        \u5bf9\u4e8e\u6a21\u5757\u5316\u5e94\u7528\u7a0b\u5e8f\uff1a\n            jpackage --type app-image -n name -p modulePath \\\n                -m moduleName\/className\n        \u5bf9\u4e8e\u975e\u6a21\u5757\u5316\u5e94\u7528\u7a0b\u5e8f\uff1a\n            jpackage --type app-image -i inputDir -n name \\\n                --main-class className --main-jar myJar.jar\n        \u8981\u4e3a jlink \u63d0\u4f9b\u60a8\u81ea\u5df1\u7684\u9009\u9879\uff0c\u8bf7\u5355\u72ec\u8fd0\u884c jlink\uff1a\n            jlink --output appRuntimeImage -p modulePath \\\n                --add-modules moduleName \\\n                --no-header-files &#91;&lt;additional jlink options&gt;...]\n            jpackage --type app-image -n name \\\n                -m moduleName\/className --runtime-image appRuntimeImage\n    \u751f\u6210 Java \u8fd0\u884c\u65f6\u7a0b\u5e8f\u5305\uff1a\n        jpackage -n name --runtime-image &lt;runtime-image&gt;\n    \u5bf9\u9884\u5b9a\u4e49\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\u8fdb\u884c\u7b7e\u540d\uff1a\n        jpackage --type app-image --app-image &lt;app-image&gt; \\\n            --mac-sign &#91;&lt;additional signing options&gt;...]\n        \u6ce8\uff1a\u6b64\u6a21\u5f0f\u4e0b\u5141\u8bb8\u7684\u5176\u4ed6\u9009\u9879\u53ea\u6709\uff1a\n              \u4e00\u7ec4\u5176\u4ed6 mac \u7b7e\u540d\u9009\u9879\u548c --verbose\n\n\u4e00\u822c\u9009\u9879\uff1a\n  @&lt;filename&gt; \n          \u4ece\u6587\u4ef6\u8bfb\u53d6\u9009\u9879\u548c\/\u6216\u6a21\u5f0f \n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --type -t &lt;type&gt; \n          \u8981\u521b\u5efa\u7684\u7a0b\u5e8f\u5305\u7684\u7c7b\u578b\n          \u6709\u6548\u503c\u4e3a\uff1a{\"app-image\", \"dmg\", \"pkg\"} \n          \u5982\u679c\u672a\u6307\u5b9a\u6b64\u9009\u9879\uff0c\u5219\u5c06\u521b\u5efa\u4e0e\u5e73\u53f0\u76f8\u5173\u7684\n          \u9ed8\u8ba4\u7c7b\u578b\u3002\n  --app-version &lt;version&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u548c\/\u6216\u7a0b\u5e8f\u5305\u7684\u7248\u672c\n  --copyright &lt;copyright string&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u7684\u7248\u6743\n  --description &lt;description string&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u7684\u8bf4\u660e\n  --help -h \n          \u5c06\u7528\u6cd5\u6587\u672c\u8f93\u51fa\u5230\u8f93\u51fa\u6d41\u5e76\u9000\u51fa\uff0c\u7528\u6cd5\u6587\u672c\u4e2d\u5305\u542b\n          \u9002\u7528\u4e8e\u5f53\u524d\u5e73\u53f0\u7684\u6bcf\u4e2a\u6709\u6548\u9009\u9879\u7684\u5217\u8868\u548c\u8bf4\u660e\n  --icon &lt;file path&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u5305\u56fe\u6807\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n  --name -n &lt;name&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u548c\/\u6216\u7a0b\u5e8f\u5305\u7684\u540d\u79f0\n  --dest -d &lt;destination path&gt;\n          \u7528\u6765\u653e\u7f6e\u6240\u751f\u6210\u7684\u8f93\u51fa\u6587\u4ef6\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u9ed8\u8ba4\u4e3a\u5f53\u524d\u7684\u5de5\u4f5c\u76ee\u5f55\u3002\n  --temp &lt;directory path&gt;\n          \u7528\u6765\u521b\u5efa\u4e34\u65f6\u6587\u4ef6\u7684\u65b0\u76ee\u5f55\u6216\u7a7a\u767d\u76ee\u5f55\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u5982\u679c\u6307\u5b9a\uff0c\u5219\u5728\u4efb\u52a1\u5b8c\u6210\u65f6\u5c06\u4e0d\u5220\u9664\u4e34\u65f6\u76ee\u5f55\uff0c\n          \u5fc5\u987b\u624b\u52a8\u5220\u9664\u4e34\u65f6\u76ee\u5f55\u3002\n          \u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u5c06\u521b\u5efa\u4e00\u4e2a\u4e34\u65f6\u76ee\u5f55\uff0c\n          \u5e76\u5728\u4efb\u52a1\u5b8c\u6210\u65f6\u5220\u9664\u8be5\u4e34\u65f6\u76ee\u5f55\u3002\n  --vendor &lt;vendor string&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u7684\u4f9b\u5e94\u5546\n  --verbose\n          \u542f\u7528\u8be6\u7ec6\u7684\u8f93\u51fa\n  --version\n          \u5c06\u4ea7\u54c1\u7248\u672c\u8f93\u51fa\u5230\u8f93\u51fa\u6d41\u5e76\u9000\u51fa\u3002\n\n\u7528\u6765\u521b\u5efa\u8fd0\u884c\u65f6\u6620\u50cf\u7684\u9009\u9879\uff1a\n  --add-modules &lt;\u6a21\u5757\u540d\u79f0&gt;&#91;,&lt;\u6a21\u5757\u540d\u79f0&gt;...]\n          \u8981\u6dfb\u52a0\u7684\u6a21\u5757\u7684\u9017\u53f7 (\",\") \u5206\u9694\u5217\u8868\n          \u6b64\u6a21\u5757\u5217\u8868\u8fde\u540c\u4e3b\u6a21\u5757\uff08\u5982\u679c\u6307\u5b9a\uff09\n          \u5c06\u4f5c\u4e3a --add-module \u53c2\u6570\u4f20\u9012\u5230 jlink\u3002\n          \u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u4ec5\u4f7f\u7528\u4e3b\u6a21\u5757\uff08\u5982\u679c\u6307\u5b9a\u4e86 --module\uff09\uff0c\n          \u6216\u8005\u4f7f\u7528\u9ed8\u8ba4\u7684\u6a21\u5757\u96c6\uff08\u5982\u679c\u6307\u5b9a\u4e86  \n          --main-jar\uff09\u3002\n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --module-path -p &lt;module path&gt;...\n          \u8def\u5f84\u7684 : \u5206\u9694\u5217\u8868\n          \u6bcf\u4e2a\u8def\u5f84\u8981\u4e48\u662f\u6a21\u5757\u7684\u76ee\u5f55\uff0c\u8981\u4e48\u662f\n          \u6a21\u5757\u5316 jar \u7684\u8def\u5f84\u3002\n          \uff08\u6bcf\u4e2a\u8def\u5f84\u53ef\u4ee5\u662f\u7edd\u5bf9\u8def\u5f84\uff0c\u4e5f\u53ef\u4ee5\u662f\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\u3002\uff09\n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --jlink-options &lt;jlink \u9009\u9879&gt; \n          \u8981\u4f20\u9012\u7ed9 jlink \u7684\u9009\u9879\u5217\u8868\uff08\u7528\u7a7a\u683c\u5206\u9694\uff09 \n          \u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u9ed8\u8ba4\u4e3a \"--strip-native-commands \n          --strip-debug --no-man-pages --no-header-files\"\u3002 \n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --runtime-image &lt;directory path&gt;\n          \u5c06\u590d\u5236\u5230\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\u7684\u9884\u5b9a\u4e49\n          \u8fd0\u884c\u65f6\u6620\u50cf\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u5982\u679c\u672a\u6307\u5b9a --runtime-image\uff0cjpackage \u5c06\u8fd0\u884c jlink \u4ee5\n          \u4f7f\u7528\u5982\u4e0b\u9009\u9879\u521b\u5efa\u8fd0\u884c\u65f6\u6620\u50cf\uff1a\n          --strip-debug\u3001--no-header-files\u3001--no-man-pages \u548c \n          --strip-native-commands\u3002\n\n\u7528\u6765\u521b\u5efa\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\u7684\u9009\u9879\uff1a\n  --input -i &lt;directory path&gt;\n          \u5305\u542b\u8981\u6253\u5305\u7684\u6587\u4ef6\u7684\u8f93\u5165\u76ee\u5f55\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u8f93\u5165\u76ee\u5f55\u4e2d\u7684\u6240\u6709\u6587\u4ef6\u5c06\u6253\u5305\u5230\n          \u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\u4e2d\u3002\n  --app-content &lt;additional content&gt;&#91;,&lt;additional content&gt;...]\n          \u8981\u6dfb\u52a0\u5230\u5e94\u7528\u7a0b\u5e8f\u6709\u6548\u8d1f\u8f7d\u4e2d\u7684\u6587\u4ef6\u548c\/\u6216\n          \u76ee\u5f55\u7684\u9017\u53f7\u5206\u9694\u8def\u5f84\u5217\u8868\u3002\n          \u6b64\u9009\u9879\u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u3002\n\n\u7528\u6765\u521b\u5efa\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u7a0b\u5e8f\u7684\u9009\u9879\uff1a\n  --add-launcher &lt;launcher name&gt;=&lt;file path&gt;\n          \u542f\u52a8\u7a0b\u5e8f\u7684\u540d\u79f0\u548c\u5305\u542b\u5173\u952e\u5b57-\u503c\u5bf9\u5217\u8868\u7684\n          \u5c5e\u6027\u6587\u4ef6\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u53ef\u4ee5\u4f7f\u7528\u5173\u952e\u5b57 \"module\"\u3001\"main-jar\"\u3001\"main-class\"\u3001\"description\"\u3001\n          \"arguments\"\u3001\"java-options\"\u3001\"app-version\"\u3001\"icon\"\u3001\n          \"launcher-as-service\"\u3001\n          \"win-console\"\u3001\"win-shortcut\"\u3001\"win-menu\"\u3001\n          \"linux-app-category\" \u548c \"linux-shortcut\"\u3002\n          \u8fd9\u4e9b\u9009\u9879\u5c06\u6dfb\u52a0\u5230\u539f\u59cb\u547d\u4ee4\u884c\u9009\u9879\u4e2d\u6216\u8005\u7528\u6765\u8986\u76d6\n          \u539f\u59cb\u547d\u4ee4\u884c\u9009\u9879\uff0c\u4ee5\u6784\u5efa\u989d\u5916\u7684\u66ff\u4ee3\u542f\u52a8\u7a0b\u5e8f\u3002\n          \u5c06\u4ece\u547d\u4ee4\u884c\u9009\u9879\u6784\u5efa\u4e3b\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u7a0b\u5e8f\u3002\n          \u53ef\u4ee5\u4f7f\u7528\u6b64\u9009\u9879\u6784\u5efa\u989d\u5916\u7684\u66ff\u4ee3\u542f\u52a8\u7a0b\u5e8f\uff0c\n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u6765\u6784\u5efa\n          \u591a\u4e2a\u989d\u5916\u7684\u542f\u52a8\u7a0b\u5e8f\u3002 \n  --arguments &lt;main class arguments&gt;\n          \u5728\u6ca1\u6709\u4e3a\u542f\u52a8\u7a0b\u5e8f\u63d0\u4f9b\u547d\u4ee4\u884c\u53c2\u6570\u65f6\uff0c\n          \u8981\u4f20\u9012\u5230\u4e3b\u7c7b\u7684\u547d\u4ee4\u884c\u53c2\u6570\n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --java-options &lt;java options&gt;\n          \u8981\u4f20\u9012\u5230 Java \u8fd0\u884c\u65f6\u7684\u9009\u9879\n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --main-class &lt;class name&gt;\n          \u8981\u6267\u884c\u7684\u5e94\u7528\u7a0b\u5e8f\u4e3b\u7c7b\u7684\u9650\u5b9a\u540d\u79f0\n          \u53ea\u6709\u5728\u6307\u5b9a\u4e86 --main-jar \u65f6\u624d\u80fd\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --main-jar &lt;main jar file&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b JAR\uff1b\u5305\u542b\u4e3b\u7c7b\n          \uff08\u6307\u5b9a\u4e3a\u76f8\u5bf9\u4e8e\u8f93\u5165\u8def\u5f84\u7684\u8def\u5f84\uff09\n          \u53ef\u4ee5\u6307\u5b9a --module \u6216 --main-jar \u9009\u9879\uff0c\u4f46\u662f\u4e0d\u80fd\u540c\u65f6\u6307\u5b9a\n          \u4e24\u8005\u3002\n  --module -m &lt;module name&gt;&#91;\/&lt;main class&gt;]\n          \u5e94\u7528\u7a0b\u5e8f\u7684\u4e3b\u6a21\u5757\uff08\u4ee5\u53ca\u53ef\u9009\u7684\u4e3b\u7c7b\uff09\n          \u6b64\u6a21\u5757\u5fc5\u987b\u4f4d\u4e8e\u6a21\u5757\u8def\u5f84\u4e2d\u3002\n          \u5982\u679c\u6307\u5b9a\u4e86\u6b64\u9009\u9879\uff0c\u5219\u5c06\u5728 Java \u8fd0\u884c\u65f6\u6620\u50cf\u4e2d\n          \u94fe\u63a5\u4e3b\u6a21\u5757\u3002\u53ef\u4ee5\u6307\u5b9a --module \u6216 --main-jar \u9009\u9879\uff0c\n          \u4f46\u662f\u4e0d\u80fd\u540c\u65f6\u6307\u5b9a\u8fd9\u4e24\u4e2a\u9009\u9879\u3002\n  --mac-package-identifier &lt;ID string&gt;\n          \u7528\u6765\u552f\u4e00\u5730\u6807\u8bc6 macOS \u5e94\u7528\u7a0b\u5e8f\u7684\u6807\u8bc6\u7b26\n          \u9ed8\u8ba4\u4e3a\u4e3b\u7c7b\u540d\u79f0\u3002\n          \u53ea\u80fd\u4f7f\u7528\u5b57\u6bcd\u6570\u5b57 (A-Z,a-z,0-9)\u3001\u8fde\u5b57\u7b26 (-) \u548c\n          \u53e5\u70b9 (.) \u5b57\u7b26\u3002\n  --mac-package-name &lt;name string&gt;\n          \u51fa\u73b0\u5728\u83dc\u5355\u680f\u4e2d\u7684\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0\n          \u8fd9\u53ef\u4ee5\u4e0e\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0\u4e0d\u540c\u3002\n          \u6b64\u540d\u79f0\u7684\u957f\u5ea6\u5fc5\u987b\u5c0f\u4e8e 16 \u4e2a\u5b57\u7b26\uff0c\u9002\u5408\n          \u663e\u793a\u5728\u83dc\u5355\u680f\u4e2d\u548c\u5e94\u7528\u7a0b\u5e8f\u201c\u4fe1\u606f\u201d\u7a97\u53e3\u4e2d\u3002\n          \u9ed8\u8ba4\u4e3a\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0\u3002\n  --mac-package-signing-prefix &lt;prefix string&gt;\n          \u5728\u5bf9\u5e94\u7528\u7a0b\u5e8f\u5305\u7b7e\u540d\u65f6\uff0c\u4f1a\u5728\u6240\u6709\u9700\u8981\u7b7e\u540d\n          \u4f46\u5f53\u524d\u6ca1\u6709\u7a0b\u5e8f\u5305\u6807\u8bc6\u7b26\u7684\u7ec4\u4ef6\u7684\n          \u524d\u9762\u52a0\u4e0a\u6b64\u503c\u3002\n  --mac-sign\n          \u8bf7\u6c42\u5bf9\u7a0b\u5e8f\u5305\u6216\u9884\u5b9a\u4e49\u7684\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\n          \u8fdb\u884c\u7b7e\u540d\u3002\n  --mac-signing-keychain &lt;keychain name&gt;\n          \u8981\u7528\u6765\u641c\u7d22\u7b7e\u540d\u8eab\u4efd\u7684\u5bc6\u94a5\u94fe\u7684\u540d\u79f0\n          \u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u4f7f\u7528\u6807\u51c6\u7684\u5bc6\u94a5\u94fe\u3002\n  --mac-signing-key-user-name &lt;team name&gt;\n          Apple \u7b7e\u540d\u8eab\u4efd\u7684\u56e2\u961f\u6216\u7528\u6237\u540d\u79f0\u90e8\u5206\u3002\n  --mac-app-store\n          \u6307\u793a jpackage \u8f93\u51fa\u9762\u5411\n          Mac App Store\u3002\n  --mac-entitlements &lt;file path&gt;\n          \u5305\u542b\u4e00\u4e9b\u6743\u5229\u7684\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u5728\u5bf9\u6346\u7ed1\u5305\u4e2d\u7684\u53ef\u6267\u884c\u6587\u4ef6\n          \u548c\u5e93\u8fdb\u884c\u7b7e\u540d\u65f6\u4f1a\u4f7f\u7528\u8fd9\u4e9b\u6743\u5229\u3002\n  --mac-app-category &lt;category string&gt;\n          \u7528\u4e8e\u6784\u9020\u5e94\u7528\u7a0b\u5e8f plist \u4e2d LSApplicationCategoryType \u7684\n          \u5b57\u7b26\u4e32\u3002\u9ed8\u8ba4\u503c\u4e3a \"utilities\"\u3002\n\n\u7528\u6765\u521b\u5efa\u5e94\u7528\u7a0b\u5e8f\u5305\u7684\u9009\u9879\uff1a\n  --about-url &lt;url&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u4e3b\u9875\u7684 URL\n  --app-image &lt;directory path&gt;\n          \u7528\u6765\u6784\u5efa\u53ef\u5b89\u88c5\u7a0b\u5e8f\u5305\u7684\n          \u6216\u5bf9\u9884\u5b9a\u4e49\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\u8fdb\u884c\u7b7e\u540d\u7684\n          \u9884\u5b9a\u4e49\u5e94\u7528\u7a0b\u5e8f\u6620\u50cf\u7684\u4f4d\u7f6e\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n  --file-associations &lt;file path&gt;\n          \u5305\u542b\u5173\u952e\u5b57-\u503c\u5bf9\u5217\u8868\u7684\u5c5e\u6027\u6587\u4ef6\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u53ef\u4ee5\u4f7f\u7528\u5173\u952e\u5b57 \"extension\"\u3001\"mime-type\"\u3001\"icon\" \u548c \"description\" \n          \u6765\u63cf\u8ff0\u6b64\u5173\u8054\u3002\n          \u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6b64\u9009\u9879\u3002\n  --install-dir &lt;directory path&gt;\n          \u5e94\u7528\u7a0b\u5e8f\u5b89\u88c5\u76ee\u5f55\u7684\u7edd\u5bf9\u8def\u5f84\n  --license-file &lt;file path&gt;\n          \u8bb8\u53ef\u8bc1\u6587\u4ef6\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n  --resource-dir &lt;directory path&gt;\n          \u8986\u76d6 jpackage \u8d44\u6e90\u7684\u8def\u5f84\n          \u53ef\u4ee5\u901a\u8fc7\u5411\u8be5\u76ee\u5f55\u4e2d\u6dfb\u52a0\u66ff\u4ee3\u8d44\u6e90\u6765\u8986\u76d6 jpackage \u7684\n          \u56fe\u6807\u3001\u6a21\u677f\u6587\u4ef6\u548c\u5176\u4ed6\u8d44\u6e90\u3002\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n  --runtime-image &lt;directory path&gt;\n          \u8981\u5b89\u88c5\u7684\u9884\u5b9a\u4e49\u8fd0\u884c\u65f6\u6620\u50cf\u7684\u8def\u5f84\n          \uff08\u7edd\u5bf9\u8def\u5f84\u6216\u76f8\u5bf9\u4e8e\u5f53\u524d\u76ee\u5f55\u7684\u8def\u5f84\uff09\n          \u5728\u521b\u5efa\u8fd0\u884c\u65f6\u7a0b\u5e8f\u5305\u65f6\u9700\u8981\u4f7f\u7528\u9009\u9879\u3002\n  --launcher-as-service\n          \u8bf7\u6c42\u521b\u5efa\u5b89\u88c5\u7a0b\u5e8f\uff0c\u4ee5\u5c06\u4e3b\n          \u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u7a0b\u5e8f\u6ce8\u518c\u4e3a\u540e\u53f0\u670d\u52a1\u7c7b\u578b\u5e94\u7528\u7a0b\u5e8f\u3002\n\n\u7528\u6765\u521b\u5efa\u5e94\u7528\u7a0b\u5e8f\u5305\u7684\u4e0e\u5e73\u53f0\u76f8\u5173\u7684\u9009\u9879\uff1a\n  --mac-dmg-content &lt;additional content path&gt;&#91;,&lt;additional content path&gt;...]\n          \u5305\u62ec DMG \u4e2d\u5f15\u7528\u7684\u6240\u6709\u5185\u5bb9\u3002\n          \u6b64\u9009\u9879\u53ef\u4ee5\u4f7f\u7528\u591a\u6b21\u3002<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u57fa\u4e8ejava21\u548cJavaFX 21\uff0c\u4f7f\u7528jdk\u7684jlink\u548cjpackage\u547d\u4ee4\u6253\u5305\u00a0FireX AI\u00a0\u684c\u9762\u7a0b\u5e8f\u53d1\u5e03\u5305\u3002<\/p>\n","protected":false},"author":1,"featured_media":274,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,11],"tags":[16,21],"class_list":["post-268","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gui","category-11","tag--gui","tag-21"],"jetpack_featured_media_url":"https:\/\/bbstone.cn\/wp-content\/uploads\/2023\/12\/\u622a\u5c4f2023-12-01-17.51.21.png","_links":{"self":[{"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/posts\/268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bbstone.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=268"}],"version-history":[{"count":11,"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/posts\/268\/revisions"}],"predecessor-version":[{"id":323,"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/posts\/268\/revisions\/323"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bbstone.cn\/index.php?rest_route=\/wp\/v2\/media\/274"}],"wp:attachment":[{"href":"https:\/\/bbstone.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bbstone.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bbstone.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}