我在使用jpackage时遇到了一个非常罕见的问题,在这里就不分享了。我觉得消除这个bug的唯一方法就是调试jpackage工具的代码。我看到它的代码是纯Java的,我想知道是否有一种简单的方法可以看到失败的代码一步步运行
我是一个经验丰富的java程序员,我知道如何使用调试器,但我无法从java启动jpackage(似乎主类包没有从其模块导出)。我认为编译完整的JDK对我来说太难了(因为它是本机代码),而且这可能不是到达代码的Java部分的方法
这就是为什么我在这里找你帮忙。有别的办法吗?
我根本无法独自完成,而且情况非常令人沮丧,因为我已经编写了几个星期的解决方案,现在由于这个bug,我没有任何东西可以交付。我也没有时间把bug归档(很难知道这是JDK还是Wix的bug,我需要在一周内完成我的工作)
在理想的情况下,应该可以在调试模式下运行jpackage.exe并为其附加远程调试器,但听起来现实有点困难
提前谢谢你
你可以通过ToolProvider API调用jpackage
:
static final ToolProvider JPACKAGE = ToolProvider.findFirst("jpackage").orElseThrow();
public static void main(String[] args) {
JPACKAGE.run(System.out, System.err, "--help"); // put actual options here
}
然后您可以从IDE或其他调试器调试此应用程序,并从那里进入jpackage
代码。
这可以工作,因为在这种情况下,jpackage
运行在与调用它的程序相同的进程中。
如果一个wix命令失败并有特定的退出码,您也可以重新运行带有--temp
选项的jpackage,将所有的临时文件输出到固定的目录中,然后直接从异常消息中重新运行失败的wix命令。
另一个可以帮助的选项是--verbose
选项,它使jpackage输出更多信息。