从命令行运行Java程序
所以我在这里有一个noob时刻,我以前从未使用命令行来运行java程序,但我现在需要。 我遇到的问题是,当我尝试运行程序时,我得到一个ClassNotFoundException。 我的class级叫做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”,因为这是它所包含的包名。 我很难过。 谢谢你的帮助。
您的类似乎已在org.openmetadata.main
包中声明。
要使java正确加载类,它需要在与包结构匹配的正确目录结构中。
因此, org.openmetadata.main.OmadUpdate
的类文件应位于目录org\openmetadata\main
。
然后,当您运行java
命令时,此目录结构的根应该在类路径上 – 对于一个简单的示例,这只意味着您当前的目录应该是org\openmetadata\main
的父目录。
在运行java
您需要使用句点而不是斜杠来指定完整的类名,即
java org.openmetadata.main.OmadUpdate
使用javac编译类后,您将拥有以下目录结构:
org/ openmetadata/ main/ OmadUpdate.class OmadUpdate.java
确保您位于org的父目录中,然后运行
java -cp . org.openmetadata.main.OmadUpdate
类名的嵌套包名由句点分隔,而目录使用斜杠。 你试过java -cp . org/openmetadata/main/OmadUpdate
很大java -cp . org/openmetadata/main/OmadUpdate
java -cp . org/openmetadata/main/OmadUpdate
你应该(因为你指定一个类名)尝试java -cp . org.openmetadata.main.OmadUpdate
java -cp . org.openmetadata.main.OmadUpdate
请注意,要使其正常工作,您必须在org
子目录上方的目录中运行它。 否则那个classpath指令cp .
将在错误的目录中开始搜索。
使用类路径集启动您的Java应用程序:
java -cp . org.openmetadata.main.OmadUpdate
-cp。 我不会做任何我想不到的事情。 你必须确保在正确的目录中调用java,这是第一个包名/文件夹的一部分(在你的情况下是org)
您需要使用完整的包和类名来运行它。