应用程序在 Intellij 中运行良好,但在打包成 exe 文件时不起作用

问题描述

我使用 picocli 构建了一个非常简单的命令行应用程序,我想将它打包成一个可执行文件。我首先使用 Maven 包将它打包成一个 jar 文件,然后按照 SO 上几个用户的推荐使用 Launch4J获取可执行文件。但是,当我在命令提示符下运行 Application.exe 时,它会引发 NoClassDefFound 错误

> Exception in thread "main" java.lang.NoClassDefFoundError:
> picocli/CommandLine                                                 
> at mycli.HelloCli.main(HelloCli.java:48)                              
> Caused by: java.lang.classNotFoundException: picocli.CommandLine      
> at java.net.urlclassloader.findClass(UnkNown Source)                  
> at java.lang.classLoader.loadClass(UnkNown Source)                    
> at sun.misc.Launcher$AppClassLoader.loadClass(UnkNown Source)         
> at java.lang.classLoader.loadClass(UnkNown Source)                    
> ... 1 more

在 IntelliJ 中执行时,应用程序运行良好。我尝试通过查看类似于 these 的答案添加我创建的自定义 jar 文件,但它似乎没有帮助。我也尝试更改执行文件夹,但这也不能解决错误

解决方法

从我在 SO 中搜索的几个答案中,我意识到 picocli jar 需要在类路径上。因此,我添加了“主类”作为包含我的 main 方法的类,并在配置 Launch4J 时将“类路径”指定到 jar 文件中,该文件是通过从存在的所有依赖项中构建工件而创建的。

有关如何从项目的依赖项中构建工件 jar 的详细信息,如果您使用 Eclipse,请访问此 answer,如果您使用 IntelliJ,请访问此 answer。)

Launch4J configuration window