首页 > 解决方案 > 应用程序在 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 中执行时运行良好。我尝试通过查看与这些类似的答案来添加我创建的自定义 jar 文件,但它似乎没有帮助。我也尝试更改执行文件夹,但这也不能解决错误。

标签: javaintellij-idealaunch4jpicocli

解决方案


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

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

Launch4J 配置窗口


推荐阅读