我是javapackager和Java 9的新手,正在研究javapackager参考中的示例,第一个示例如下所示:
示例1 - 使用-createjar命令
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
错误:无法找到或加载主类 moduleTCD.com.adonax.tanpura.TCDLaunch 引起:java.lang.NoClassDefFoundError:com / adonax / tanpura / TCDLaunch (错误的名字:moduleTCD / com / adonax / tanpura / TCDLaunch)
用于制作jar的命令:
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如下:“要执行的应用程序类的限定名称。”但我没有看到任何“合格”含义的迹象。我试了几个看似合理的名字。具有我使用的模块名称的表单是否正确?
我创建了第二个“已编译”目录,其中只是从项目中省略了模块,并使用my -srcdir的命令重试该命令。在这种情况下,生成的jar文件工作正常。
我确认我可以使用已编译的源(来自“compiled”文件夹)从命令行运行程序:
java -p。 -m moduleTCD / com.adonax.tanpura.TCDLaunch
有什么想法? 为了制作一个自包含的exe包(主要目标),如果我正确阅读文档,我需要一个基于模块的jar文件。
答案 0 :(得分:0)
我最后通过仔细研究jar命令的语法来解决这个问题。 (由于Eclipse IDE自动处理这个问题,我以前从未做过的事情。)
这是我发现和修复的内容。
1) -appclass 参数应该是main的包位置,并且不包括包所在的模块。
因此,我改变了" moduleTCD / com.adonax.tanpura.TCDLaunch" to" com.adonax.tanpura.TCDLaunch"。
2) -srcdir 参数应该是模块文件夹(包含module-info.class)。因此,我改变了#34;编译" to"编译/ src / moduleTCD"。
因此,对于我的特定情况(只有一个模块,没有额外的jar或库链接),以下命令(作为一行)正常工作。
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 .