首页 > 解决方案 > 从命令行运行程序时找不到类

问题描述

这是我的项目的结构:

MyProject
-lib
   -mp3agic-0.9.0.jar

-src
   -com.company
      -Main.java

在 Main 中,我导入了 mp3agic 的内容:

导入 com.mpatric.mp3agic.*;

在 MyProject 中,我使用以下方法编译该类:

javac -cp "lib/*" src/com/company/Main.java

从 MyProject/src,我尝试使用以下命令运行程序:

爪哇-cp。com/公司/主要

我收到以下错误:

线程“主”java.lang.NoClassDefFoundError 中的异常:com/mpatric/mp3agic/InvalidDataException

显然,jdk 在运行类时无法从 lib 文件夹中找到依赖项,尽管编译时不会出现此问题。我猜这个命令的语法有问题,但我就是找不到。

你能帮我么?

编辑:我解决了这个问题,将 lib 文件夹移动到 src 下,然后运行:

C:\MyProject\src>javac -cp "lib/*" com/company/Main.java

C:\MyProject\src>java -cp .;"lib/*" com/company/Main

现在,代码编译并执行没有任何问题。

但是,如果我将 lib 留在项目根目录下,则会发生以下情况:

C:\MyProject>javac -cp "lib/*" src/com/company/Main.java

C:\MyProject>java -cp .;"lib/*" src/com/company/Main

错误:无法找到或加载主类 src.com.company.Main

为什么?

标签: javaclasspath

解决方案


您应该使用 maven 或 gradle,否则您必须说明您使用的是哪个控制台,以及哪个操作系统 - 如果您不知道控制台是什么,您必须先在谷歌上搜索,然后再javac直接搞乱 - 但是如果你坚持:

对于 Linux、OSX、任何类 UNIX:

javac -cp ".:lib/mp3agic-0.9.0.jar" src/com/company/Main.java

对于 Windows:

javac -cp ".;lib/mp3agic-0.9.0.jar" src/com/company/Main.java

在windows下运行:

java -cp .;lib\mp4agic-0.9.0.jar com.company.Main

您可能需要使用斜杠 (/) 而不是反斜杠,具体取决于您使用的控制台。或者只是尝试“/”或“\”,看看什么对你有用。

如果您仍然遇到类未找到异常,那么问题与类路径或java命令无关,而是与您的代码有关(很难说,没有看到代码)。


推荐阅读