所以我在这里有一个noob时刻,我以前从未使用命令行来运行java程序,但我现在需要。我遇到的问题是,当我尝试运行程序时,我得到一个ClassNotFoundException。我的班级名为OmadUpdate。我已经使用javac命令将OmadUpdate.java文件编译成OmadUpdate.class。我已经检查了目录,它们肯定都在那里,但是当我运行java OmadUpdate命令时,它会给我一条错误消息说
Exception in thread "main" java.lang.NoClassDefFoundError: OmadUpdate (wrong name: org/openmetadata/main/OmadUpdate)
......
......
Could not find the main class: OmadUpdate. Program will exit
但它就在目录中。当我输入dir时,我同时拥有OmadUpdate.class和OmadUpdate.java。我甚至尝试使用“java org.openmetadata.main.OmadUpdate”,因为这是它所包含的包名。我很难过。谢谢你的帮助。
答案 0 :(得分:8)
您的课程似乎已在org.openmetadata.main
包中声明。
要让java正确加载类,它需要在与包结构匹配的正确目录结构中。
因此org.openmetadata.main.OmadUpdate
的类文件应位于org\openmetadata\main
目录中。
然后,当您运行java
命令时,此目录结构的根应位于类路径上 - 对于一个简单示例,这只意味着您当前的目录应该是org\openmetadata\main
的父目录
运行java
时,您需要使用句点而不是斜杠来指定完整的类名,即
java org.openmetadata.main.OmadUpdate
答案 1 :(得分:4)
使用javac编译类后,您将拥有以下目录结构:
org/
openmetadata/
main/
OmadUpdate.class
OmadUpdate.java
确保您位于org的父目录中,然后运行
java -cp . org.openmetadata.main.OmadUpdate
答案 2 :(得分:2)
类名的嵌套包名由句点分隔,而目录使用斜杠。您尝试java -cp . org/openmetadata/main/OmadUpdate
java -cp . org.openmetadata.main.OmadUpdate
尝试的org
是好的(因为您指定了班级名称)
请注意,要使其正常工作,您必须在cp .
子目录上方的目录中运行它。否则,classpath指令{{1}}将在错误的目录中开始搜索。
答案 3 :(得分:0)
使用类路径集启动您的Java应用程序:
java -cp . org.openmetadata.main.OmadUpdate
答案 4 :(得分:0)
-cp。我不会做任何我想不到的事情。你必须确保在正确的目录中调用java,这是第一个包名/文件夹的一部分(在你的案例组织中)
您需要使用完整的包和类名来运行它。