【问题标题】:unable to make module-based jar with javapackager无法使用 javapackager 制作基于模块的 jar
【发布时间】:2018-05-08 15:16:55
【问题描述】:

我是 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

错误:无法找到或加载主类 模块TCD.com.adonax.tanpura.TCDLaunch 引起:java.lang.NoClassDefFoundError: com/adonax/tanpura/TCDLaunch (错误名称: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 中的 manifest 显示:

Main-Class: moduleTCD/com.adonax.tanpura.TCDLaunch

到目前为止我已经尝试过解决这个问题:

  • 我无法从文档中判断我是否正确指定了 -appclass 参数。文档定义 -appclass 如下:“要执行的应用程序类的限定名称。”但我没有看到任何迹象表明“合格”是什么意思。我尝试了几个看似合理的不同名称。我使用的模块名称的表单是否正确?

  • 我创建了第二个“已编译”目录,在该目录中只是从项目中省略了模块,并使用我的 -srcdir 重试了该命令。在这种情况下,生成的 jar 文件可以正常工作。

  • 我验证我可以使用已编译的源代码(来自“已编译”文件夹)从命令行运行程序:

    java -p 。 -m 模块TCD/com.adonax.tanpura.TCDLaunch

有什么想法吗? 为了制作一个独立的 exe 包(主要目标),如果我正确阅读文档,我需要一个基于模块的 jar 文件。

【问题讨论】:

    标签: java java-9 java-module javapackager


    【解决方案1】:

    通过仔细查看 jar 命令的语法,我终于明白了这一点。 (由于 Eclipse IDE 自动处理这件事,我过去从未做过。)

    这是我发现并修复的。

    1) -appclass 参数应该是 main 的包位置,不包括包所在的模块。

    因此,我将参数从“moduleTCD/com.adonax.tanpura.TCDLaunch”更改为“com.adonax.tanpura.TCDLaunch”。

    2) -srcdir 参数应该是模块文件夹(包含 module-info.class)。因此,我将参数从“compiled”更改为“compiled/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 .
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多