代码之家  ›  专栏  ›  技术社区  ›  Sahand

如何用IntelliJ编译Java项目并在终端上运行(NoClassDefFoundError)

  •  1
  • Sahand  · 技术社区  · 7 年前

    我喜欢IntelliJ,因为它易于使用,IDE功能强大。但是,由于我的项目的性质,在IntelliJ中构建完所有内容之后,我希望通过终端运行相关的.class文件。我的结构如下:

    out/
    |
    |-production/
    |  |
    |  |-AILab2/
    |     |
    |     |-TTT/
    |     |  |--Main.class
    |     |  |--Constants.class
    |     |  |--Deadline.class
    |     |  |--pipe|
    |     |  |--etc...
    |     |
    |     |-TTT3
    |        |--Constants.class
    |        |--Deadline.class
    |        |--etc...
    src
    |
    |-TTT
    |  |--Main.java
    |  |--Constants.java
    |  |--Deadline.java
    |  |--etc...
    |
    |-TTT3
       |--Constants.java
       |--Deadline.java
       |--etc...
    

    ~/IdeaProjects/AILab2/out/production/AILab2/TTT$ java Main init verbose < pipe | java Main > pipe
    Error: Could not find or load main class Main
    Caused by: java.lang.NoClassDefFoundError: TTT/Main (wrong name: Main)
    Error: Could not find or load main class Main
    Caused by: java.lang.NoClassDefFoundError: TTT/Main (wrong name: Main)
    

    我在网上搜索了一下,不明白这个错误的原因。我以前也用同样的方式运行过项目,但这次,它不起作用。感谢你的帮助。

    编辑:将端子命令更改为包含 TTT 产生了相同的消息:

    $ java TTT.Main init verbose < pipe | java TTT.Main > pipe
    Error: Could not find or load main class TTT.Main
    Caused by: java.lang.ClassNotFoundException: TTT.Main
    Error: Could not find or load main class TTT.Main
    Caused by: java.lang.ClassNotFoundException: TTT.Main
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   GhostCat    7 年前

    类的名称必须包含包(TTT.Main),并且您必须在父目录(包含TTT文件夹的目录)中调用Java。

    请放心:它总是这样工作的。对于“以前是这样工作的”唯一的解释是:那时你的类不在一个不同的包中!

    除此之外,您还必须了解如何在类路径中找到类。从这里开始阅读 https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html 例如。