【问题标题】:Running Java Program From Command Line从命令行运行 Java 程序
【发布时间】:2012-04-10 09:39:31
【问题描述】:

所以我在这里有一个菜鸟时刻,我以前从未使用过命令行来运行 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”,因为这是它所在的包名。我难住了。感谢您的帮助。

【问题讨论】:

  • 你能发布你的源代码文件吗?这些文件是否在正确的文件夹层次结构中? (即 OmadUpdate.java 在名为“org”的文件夹中名为“openmetadata”的文件夹中的名为“main”的文件夹中吗?您是否在 java 源文件的顶部使用“包”声明?

标签: java command


【解决方案1】:

您的类似乎已在 org.openmetadata.main 包中声明。

要让java正确加载类,它需要位于与包结构匹配的正确目录结构中。

所以org.openmetadata.main.OmadUpdate 的类文件应该在目录org\openmetadata\main 中。

然后,当你运行java 命令时,这个目录结构的根应该在类路径上——举个简单的例子,这意味着你的当前目录应该是org\openmetadata\main 的父目录。

运行java 时,您需要使用句点而不是斜线指定完整的类名,即

java org.openmetadata.main.OmadUpdate

【讨论】:

  • 感谢所有这么快回答的人,但这是有效的,-cp 没有帮助,我所要做的就是 java org.openmetadata.main.OmadUpdate。非常感谢!
【解决方案2】:

使用 javac 编译类后,您将拥有以下目录结构:

org/
  openmetadata/
    main/
      OmadUpdate.class
      OmadUpdate.java

确保你在 org 的父目录中,然后运行

java -cp . org.openmetadata.main.OmadUpdate

【讨论】:

    【解决方案3】:

    类名的嵌套包名用句点分隔,而目录使用斜杠。您尝试java -cp . org/openmetadata/main/OmadUpdate 的几率很高(因为您指定了一个类名)尝试了java -cp . org.openmetadata.main.OmadUpdate

    请注意,要使其正常工作,您必须在 org 子目录上方的目录中运行它。否则,classpath 指令cp . 将在错误的目录中开始搜索。

    【讨论】:

      【解决方案4】:

      使用类路径集启动您的 Java 应用程序:

      java -cp . org.openmetadata.main.OmadUpdate
      

      【讨论】:

        【解决方案5】:

        -cp 。不会做任何我不认为的事情。您必须确保在正确的目录中调用 java,这是第一个包名称/文件夹(在您的情况下为 org)的一部分

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-08
          • 2011-04-11
          • 1970-01-01
          • 2013-07-22
          • 1970-01-01
          • 1970-01-01
          • 2012-07-12
          • 1970-01-01
          相关资源
          最近更新 更多