Java 从命令行运行程序时未找到类
以下是我的项目结构:Java 从命令行运行程序时未找到类,java,classpath,Java,Classpath,以下是我的项目结构: MyProject -lib -mp3agic-0.9.0.jar -src -com.company -Main.java 在Main中,我导入了mp3agic的内容: 导入com.compatric.mp3agic.* 在MyProject中,我使用以下方法编译该类: javac-cp“lib/*”src/com/company/Main.java 在MyProject/src中,我尝试运行以下程序: java-cp。com/company/
MyProject
-lib
-mp3agic-0.9.0.jar
-src
-com.company
-Main.java
在Main中,我导入了mp3agic的内容:
导入com.compatric.mp3agic.*
在MyProject中,我使用以下方法编译该类:
javac-cp“lib/*”src/com/company/Main.java
在MyProject/src中,我尝试运行以下程序:
java-cp。com/company/Main
我得到以下错误:
线程“main”java.lang.NoClassDefFoundError中出现异常:com/mpatric/mp3agic/InvalidDataException
显然,jdk在运行类时无法从lib文件夹中找到依赖项,尽管编译时不会出现此问题。
我猜这个命令的语法有问题,但我就是找不到
你能帮帮我吗
编辑:我解决了这个问题,在src下移动lib文件夹,然后运行:
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
为什么?java.exe-classpath{path}Main
我认为您还必须添加类路径,并且在运行程序时(不仅仅是编译)您应该使用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
您可能需要使用斜杠(/)而不是反斜杠,具体取决于您使用的控制台。或者试试“/”或“\”看看什么适合你
如果您仍然得到类未找到异常,那么问题与classpath或
java
命令无关,而是与您的代码有关(很难说,没有看到代码)。显然,jdk在运行类时无法从lib文件夹中找到依赖项,尽管在编译时不会出现此问题。
因为您在编译时将lib/*
添加到类路径,而不是在运行时。您需要库和类路径上的代码。类路径上的条目在Windows上用“;”分隔,在其他所有项目上用“:”分隔。所以试试-cp。;lib/*
您可以明确地告诉Javac您的lib文件夹。您必须对java命令执行相同的操作,我用java-cp尝试过。;lib/*com/company/main,现在我得到一个错误:找不到或加载main类com.company。main@AlexReds:您是否有名为com.company.main
的类?提示:案例很重要。我在Windows上使用Intellij终端。正如我在文章中提到的,我可以毫无问题地编译,但是当我运行NoClassDefFoundError时,我得到了一个NoClassDefFoundError。;lib\your-jar-dependency.jar com.company.Main(刚刚添加到答案中)java.lang.ClassNotFoundException:com.mpatric.mp3agic.InvalidDataException