在OSX终端上无光盘编译java代码

在OSX终端上无光盘编译java代码,java,terminal,Java,Terminal,当我跑的时候 javac 'path/to/test.java' java 'path/to/test' 我犯了这样的错误 Exception in thread "main" java.lang.NoClassDefFoundError: path/to/test (wrong name: test) 当我在运行“cd path/to”后执行相同操作时,它会工作,但有没有一种方法可以在不使用cd命令的情况下执行此操作?如果是,怎么做?假设test.java没有包语句,您的类(应该命名为te

当我跑的时候

javac 'path/to/test.java'
java 'path/to/test'
我犯了这样的错误

Exception in thread "main" java.lang.NoClassDefFoundError: path/to/test (wrong name: test)

当我在运行“cd path/to”后执行相同操作时,它会工作,但有没有一种方法可以在不使用cd命令的情况下执行此操作?如果是,怎么做?

假设
test.java
没有
语句,您的类(应该命名为
test
,而不是
test
)在未命名包中,那么请执行以下操作:

javac'path/to/test.java'
java-cp“路径/目标”测试
如果您的
test.java
文件以
包开头,则语句,然后执行以下操作:

java-cp'path'to.test
如果它说
package path.to,然后执行以下操作:

java path.to.test
或者这是明确的:

java-cp。路径测试

如果您的package语句使用了任何其他名称,那么您的目录结构是错误的,因为目录必须与package语句匹配,从类路径(
-cp
)中命名的目录开始。

假设
test.java
没有
package
语句,您的类(应命名为
Test
,而不是
Test
)在未命名的包中,请执行以下操作:

javac'path/to/test.java'
java-cp“路径/目标”测试
如果
test.java
文件以
package to;
语句开头,则执行以下操作:

java-cp'path'to.test
如果显示的是
包路径.to;
,则执行以下操作:

java path.to.test
或者这是明确的:

java-cp.path.to.test

如果您的package语句使用了任何其他名称,那么您的目录结构是错误的,因为目录必须与package语句匹配,从类路径(
-cp
)中命名的目录开始。

您的
Test.java
文件应该在顶部有一行
package

package path.to;

public class Test {

    public static void main(String argv[]) {
    }
}
然后您可以编译并运行它。它在我的MacBook Pro上工作。请注意,
java path.to.Test
java path/to/Test

如果缺少
程序包
语句,则您将得到正在报告的错误

% javac path/to/Test.java
% java path.to.Test
Exception in thread "main" java.lang.NoClassDefFoundError: path/to/Test (wrong name: Test)

您的
Test.java
文件应该在顶部有一行
package

package path.to;

public class Test {

    public static void main(String argv[]) {
    }
}
然后您可以编译并运行它。它在我的MacBook Pro上工作。请注意,
java path.to.Test
java path/to/Test

如果缺少
程序包
语句,则您将得到正在报告的错误

% javac path/to/Test.java
% java path.to.Test
Exception in thread "main" java.lang.NoClassDefFoundError: path/to/Test (wrong name: Test)

如果希望从当前位置(可能是项目目录)编译和运行该类,我建议:

  • 在类中使用包声明:

    package path.to;
    
    public class Test {
        public static void main(String[] args) {
            System.out.println("LOADED");
        }
    }
    
  • 运行代码时,请在类名上使用点符号:

    javac path/to/Test.java
    java path.to.Test
    

  • 如果希望从当前位置(可能是项目目录)编译和运行该类,我建议:

  • 在类中使用包声明:

    package path.to;
    
    public class Test {
        public static void main(String[] args) {
            System.out.println("LOADED");
        }
    }
    
  • 运行代码时,请在类名上使用点符号:

    javac path/to/Test.java
    java path.to.Test
    

  • path/to/Test.java
    需要与源路径相对。
    java
    命令不采用路径,而是采用完全限定的类名-句点,而不是斜杠。它与类路径相对。(类名应以大写字母开头。)@bphilipnyc,学习命令行工具的工作方式没有错。IDE非常适合编辑和手动运行单元测试,但是如果您的签入是由一个持续集成系统构建、测试和打包的,那么迟早您需要了解命令行工具。我没有像现在这样运行javac10年。这当然没什么害处,但你最好花时间学习真正的编程原理。它还将识别一些新程序员经常犯的常见语法错误……例如,OP可能缺少一个包语句,几乎任何IDE都可能捕捉到它(见@stackoverflowuser2010的答案).path/to/Test.java
    需要与源路径相对。
    java
    命令不采用路径,而是采用完全限定的类名-句点,而不是斜杠。它与类路径相对。(类名应以大写字母开头。)@bphilipnyc,学习命令行工具的工作方式没有错。IDE非常适合编辑和手动运行单元测试,但是如果您的签入是由一个持续集成系统构建、测试和打包的,那么迟早您需要了解命令行工具。我没有像现在这样运行javac10年。这当然没什么害处,但你最好花时间学习真正的编程原理。它还将识别一些新程序员经常犯的常见语法错误……例如,OP可能缺少一个包语句,几乎任何IDE都可能捕捉到它(见@stackoverflowuser2010的答案)。谢谢!但是如果我有一个package语句呢?@stacko那取决于
    package
    语句说什么。谢谢!但是如果我有一个package语句呢?@stacko那取决于
    package
    语句说什么。那不应该是
    java path.to.Test
    ?@Andreas:
    java path.to.Test
    java pat吗h/to/Test
    在此上下文中是等效的。我将修改答案以澄清。这不应该是
    java path.to.Test
    ?@Andreas:
    java path.to.Test
    java path/to/Test
    在此上下文中是等效的。我将修改答案以澄清。