从命令行运行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)

您需要使用完整的包和类名来运行它。