无法使用 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

到目前为止我已经尝试解决的问题:

有什么想法吗? 为了制作一个独立的 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 .