【问题标题】:Mac Terminal: Could not find or load main class CLASSNAMEMac 终端:无法找到或加载主类 CLASSNAME
【发布时间】:2014-08-02 05:17:18
【问题描述】:

我正在尝试通过 Mac 上的终端运行 java 程序,但得到:

Error: Could not find or load main class (MY CLASSNAME)

我用 Eclipse 编译了这个应用程序,当我用 Eclipse 运行它时,它运行良好。 此外,我在正确的目录中,当我在终端中键入“ls”时,它会列出所有文件,包括我要运行的类文件。

这是我输入的:

java mainClass

非常感谢帮助解决这个问题!

谢谢,

院长

编辑:解决方案 - 而不是 java mainClass,它也必须有包:java startPackage.mainClass

【问题讨论】:

  • mainClass 住在package 中吗?
  • 是的,它在 startPackage 中
  • 谢谢!这就是问题所在!
  • 我的主班是凯撒,java com.company.caesar 不起作用。我不知道发生了什么......

标签: java eclipse macos


【解决方案1】:

确保您的 CLASSPATH 中有当前目录。

java -cp . mainClass

要全局设置,您可以在.bash_profile 中使用export CLASSPATH=$CLASSPATH:.

另外,如果您的类位于 com.foo.bar 等包中,则您需要转到 com 的父目录并使用完整路径运行您的应用程序。

java com.foo.bar.mainClass

【讨论】:

  • 谢谢!问题出在包装上。
  • 但是,现在我遇到了另一个问题:一旦我尝试从我的导入中做一些事情,程序就会冻结。在 Eclipse 中它工作正常。这是否意味着我必须以某种方式告诉终端我有额外的构建路径? (我正在使用其他 Jars 中的类) - 这就是 CLASSPATH 的意思吗?
  • 它是一个路径分隔符,就像 Windows 上的;,告诉操作系统如何“拆分”路径元素,因此您可以在单个字符串中指定多个不同的路径
  • @user3243080,使用java -cp .:PathToLib1.jar:PathToLib2.jar com.foo.bar.mainClass
【解决方案2】:

首先确保您位于顶级package之上的目录

如果类属于packagecom.foo.bar,你希望在com上面的目录中。

在您的情况下,您希望位于startPack 上方的目录中。

那么你需要使用全限定名来运行类...

java statPack.mainClass

例如...

【讨论】:

  • 好的,现在可以了。唯一的问题是,当它从我导入的外部 jar 中运行类时,它会冻结。我是否必须以某种方式告诉终端我正在导入外部 Jar?
  • 是的,您需要使用-cp 参数告诉Java 应该在哪里搜索其他资源,例如java -cp /path/to/Library.jar:/path/to/directory/full/of/classes stackPack.mainClass 您可能需要用空格引用或转义任何路径元素;)
  • 谢谢!你写jar后的“:”是什么?
  • @NicolasS.Xu 这是unix路径分隔符,在windows上是;
【解决方案3】:

我也在 Mac 机器上遇到过这个问题,然后我必须做的是:

问题陈述:

我在项目的根目录下有一个包 xyz,即 src/main/java,然后在 xyz 包中我有一个类 Student.java

我的当前目录是/Users/username/projectname/src/main/java/xyz: 我可以看到 Student.java 存在这里 我使用 javac Student.java 编译它

现在我看到类文件已在此位置创建。但是当我尝试使用 java Student 运行类文件时 我收到错误:错误:无法找到或加载主类学生

解决方案:

现在的解决方法是在目录中退一步,进入根路径:/Users/username/projectname/src/main/java 并运行命令

java xyz.Student

它会起作用的。

关注链接:https://javarevisited.blogspot.com/2015/04/error-could-not-find-or-load-main-class-helloworld-java.html

【讨论】:

    【解决方案4】:

    对于像我这样愚蠢的人,请确保输入 java HelloWorld - 和 NOT java HelloWorld.class - 以运行名称为 HelloWorld.class 的编译文件。如果您习惯按 Tab 键来完成文件名,则尤其如此,因为如果您在键入 java He 之类的内容后按 Tab 键进行自动完成,终端会给您 java HelloWorld.class...

    这个答案在这里是因为我花了 3 个站点(包括这个答案)和 25 分钟才弄清楚我做错了什么。

    逻辑简单,打字难

    【讨论】:

      【解决方案5】:

      使用绝对路径也可以解决这个问题:

      java -classpath /Users/xingliu/IdeaProjects/springproject/src/main/java/ startPackage.mainClass
      

      【讨论】:

        猜你喜欢
        • 2016-12-03
        • 1970-01-01
        • 2015-07-25
        • 2022-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多