通过IntelliJ in命令运行编译的java类,错误:NoClassDefFoundError

时间:2018-01-29 15:57:25

标签: java intellij-idea

注意:我已经在IntelliJ中运行程序而没有错误,我需要使它独立于IDE,即在命令行下运行它。我得到错误不是因为我没有实现它,但我不明白我怎么能让编译器知道它。

我有一个由7到10个java文件组成的项目,依赖于5个jar文件。该项目在IntelliJ项目2017.1版本中进行管理。

现在我想运行一个带有项目主函数的java类。在本地计算机的命令行中,我使用脚本运行该类:

/project/out/path> java retrieve_result

我将脚本更正为How to run java program in command prompt,created by intellij

注意:在retrieve_result类中,存在对其他java和jar文件的依赖性。

错误如下所示:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/store/Directory
        at HW2MainLucene.ReadIndex(HW2MainLucene.java:69)
        at HW2MainLucene.main(HW2MainLucene.java:23)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.store.Directory
        at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@9-internal/BuiltinClassLoader.java:366)
        at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@9-internal/ClassLoaders.java:184)
        at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:419)
        ... 2 more

据我所知,这个错误是因为编译器无法找到jar文件。但是在IntelliJ项目中,它已经配置好了。

如何配置编译器以获取可用的程序?

1 个答案:

答案 0 :(得分:0)

“已配置”对您意味着什么?

错误表明您尚未在IntelliJ中正确地将这些JAR添加到CLASSPATH中。

我假设您没有使用Maven。您的项目中有/ lib文件夹,与/ src文件夹相同,包含您的应用程序所需的JAR。

打开项目结构(Crtl + Alt + Shift + S),单击Libraries,然后将/ lib目录添加为源存档目录。这应该将它找到的所有JAR放在CLASSPATH中。

在IDE外部运行的打包将是另一回事。我预测一旦你尝试在IntelliJ之外部署就会遇到问题。