无法使用 javapackager 制作基于模块的 jar
unable to make module-based jar with javapackager
我是 javapackager 和 Java 9 的新手,正在研究 javapackager 参考中的示例,第一个示例如下所示:
Example 1 - Using the -createjar Command
javapackager -createjar -appclass package.ClassName
-srcdir classes -outdir out -outfile outjar -v
Packages the contents of the classes directory to outjar.jar,
sets the application class to package.ClassName.
我可以制作 jar 文件 (tcdmod.jar) 而不会出现错误消息。但是当我尝试使用普通命令执行 jar 时出现错误:
java -jar tcdmod.jar
Error: Could not find or load main class
moduleTCD.com.adonax.tanpura.TCDLaunch
Caused by: java.lang.NoClassDefFoundError: com/adonax/tanpura/TCDLaunch
(wrong name: moduleTCD/com/adonax/tanpura/TCDLaunch)
用于制作罐子的命令:
javapackager -createjar -appclass moduleTCD/com.adonax.tanpura.TCDLaunch
-srcdir compiled -outdir outex1 -outfile tcdmod -v
编译文件夹:
compiled/moduleTCD/com/adonax/tanpura/ [compiled classes here and below]
compiled/moduleTCD/module-info.class
jar 中的清单显示:
Main-Class: moduleTCD/com.adonax.tanpura.TCDLaunch
到目前为止我已经尝试解决的问题:
我无法从文档中判断我是否正确指定了 -appclass 参数。文档定义 -appclass 如下:"Qualified name of the application class to be executed." 但我没有看到任何关于 "qualified" 含义的指示。我尝试了几个看似合理的不同名称。我使用的带有模块名称的表格是否正确?
我创建了第二个 "compiled" 目录,其中的模块只是从项目中省略了,并使用我的 -srcdir 重试了命令。生成的 jar 文件在那种情况下工作正常。
我验证了我可以使用编译后的源代码(来自 "compiled" 文件夹)从命令行 运行 程序:
java-p。 -m moduleTCD/com.adonax.tanpura.TCDLaunch
有什么想法吗?
为了制作一个独立的 exe 包(主要目标),如果我正确阅读文档,我需要一个基于模块的 jar 文件。
通过仔细查看 jar 命令的语法,我终于明白了这一点。 (感谢 Eclipse IDE 自动处理,这是我过去从未做过的事情。)
这是我发现并修复的内容。
1)
-appclass参数应该是main的包位置,不包括包所在的模块。
因此,我将参数从 "moduleTCD/com.adonax.tanpura.TCDLaunch" 更改为 "com.adonax.tanpura.TCDLaunch"。
2) -srcdir 参数应该是模块文件夹(包含模块-info.class)。因此,我将参数从 "compiled" 更改为 "compiled/src/moduleTCD".
因此,对于我的特定情况(只有一个模块,没有其他 jar 或库 link 以上),以下命令(作为单行)工作正常。
javapackager -createjar -appclass com.adonax.tanpura.TCDLaunch -srcdir
compiled/src/moduleTCD -outdir outex1 -outfile tcdmod -v
这是同样有效的(单行)jar 命令。
jar -cfe outex1.tcdmod.jar com.adonax.tanpura.TCDLaunch -C
compiled/src/moduleTCD .
我是 javapackager 和 Java 9 的新手,正在研究 javapackager 参考中的示例,第一个示例如下所示:
Example 1 - Using the -createjar Command
javapackager -createjar -appclass package.ClassName -srcdir classes -outdir out -outfile outjar -v Packages the contents of the classes directory to outjar.jar, sets the application class to package.ClassName.
我可以制作 jar 文件 (tcdmod.jar) 而不会出现错误消息。但是当我尝试使用普通命令执行 jar 时出现错误:
java -jar tcdmod.jar
Error: Could not find or load main class moduleTCD.com.adonax.tanpura.TCDLaunch Caused by: java.lang.NoClassDefFoundError: com/adonax/tanpura/TCDLaunch (wrong name: moduleTCD/com/adonax/tanpura/TCDLaunch)
用于制作罐子的命令:
javapackager -createjar -appclass moduleTCD/com.adonax.tanpura.TCDLaunch
-srcdir compiled -outdir outex1 -outfile tcdmod -v
编译文件夹:
compiled/moduleTCD/com/adonax/tanpura/ [compiled classes here and below]
compiled/moduleTCD/module-info.class
jar 中的清单显示:
Main-Class: moduleTCD/com.adonax.tanpura.TCDLaunch
到目前为止我已经尝试解决的问题:
我无法从文档中判断我是否正确指定了 -appclass 参数。文档定义 -appclass 如下:"Qualified name of the application class to be executed." 但我没有看到任何关于 "qualified" 含义的指示。我尝试了几个看似合理的不同名称。我使用的带有模块名称的表格是否正确?
我创建了第二个 "compiled" 目录,其中的模块只是从项目中省略了,并使用我的 -srcdir 重试了命令。生成的 jar 文件在那种情况下工作正常。
我验证了我可以使用编译后的源代码(来自 "compiled" 文件夹)从命令行 运行 程序:
java-p。 -m moduleTCD/com.adonax.tanpura.TCDLaunch
有什么想法吗? 为了制作一个独立的 exe 包(主要目标),如果我正确阅读文档,我需要一个基于模块的 jar 文件。
通过仔细查看 jar 命令的语法,我终于明白了这一点。 (感谢 Eclipse IDE 自动处理,这是我过去从未做过的事情。)
这是我发现并修复的内容。
1) -appclass参数应该是main的包位置,不包括包所在的模块。
因此,我将参数从 "moduleTCD/com.adonax.tanpura.TCDLaunch" 更改为 "com.adonax.tanpura.TCDLaunch"。
2) -srcdir 参数应该是模块文件夹(包含模块-info.class)。因此,我将参数从 "compiled" 更改为 "compiled/src/moduleTCD".
因此,对于我的特定情况(只有一个模块,没有其他 jar 或库 link 以上),以下命令(作为单行)工作正常。
javapackager -createjar -appclass com.adonax.tanpura.TCDLaunch -srcdir
compiled/src/moduleTCD -outdir outex1 -outfile tcdmod -v
这是同样有效的(单行)jar 命令。
jar -cfe outex1.tcdmod.jar com.adonax.tanpura.TCDLaunch -C
compiled/src/moduleTCD .