修复Java类路径错误 | AI生成和翻译

Home 2025.06

您遇到的错误(Could not find or load main class scripts.benchmark.MultiMark)是因为您尝试从项目根目录(~/projects/lzwjava.github.io)使用完全限定类名(scripts.benchmark.MultiMark)运行Java程序,但Java运行时期望从包结构开始的目录运行该类,或者您需要正确指定类路径。当您切换到scripts/benchmark目录并运行java MultiMark时,它成功了,因为该类相对于命令位于正确的目录中。

要从项目根目录(~/projects/lzwjava.github.io)运行MultiMark.javaMultiMark.class而不切换目录,您可以使用-cp(类路径)选项与java命令告诉Java在哪里找到编译后的类文件。以下是两种实现方法,让您保持在根目录:


选项1:使用类路径运行编译后的类

如果MultiMark.class已存在于scripts/benchmark/中(如您的ls输出所示),您可以通过指定类路径从根目录运行它。

  1. 保持在根目录 确保您在~/projects/lzwjava.github.io中。

  2. 运行程序 使用-cp选项指向包含类文件的目录:
    java -cp scripts/benchmark MultiMark
    
    • -cp scripts/benchmark告诉Java在scripts/benchmark目录中查找类。
    • MultiMark是类名(没有.class或包前缀,因为MultiMark.java没有package语句)。

    这应该产生如下输出:

    CPU cores: 32
    ...
    
  3. 注意:如果MultiMark.class已过时或缺失,首先从根目录编译源文件:
    javac scripts/benchmark/MultiMark.java
    

    然后运行上述命令。


选项2:使用类路径直接运行源文件(Java 11+)

如果您更喜欢直接运行源文件(如python script.py),您可以使用java命令与源文件路径,并指定类路径。

  1. 保持在根目录 确保您在~/projects/lzwjava.github.io中。

  2. 运行源文件 使用:

    java -cp scripts/benchmark scripts/benchmark/MultiMark.java
    
    • -cp scripts/benchmark将类路径设置为包含源的目录。
    • scripts/benchmark/MultiMark.java指定要编译和运行的源文件。

    这在一个步骤中编译并运行MultiMark.java,产生与之前相同的输出。


选项3:在根目录中创建Shell脚本

为了更方便(如从根目录运行./multimark),您可以在根目录(~/projects/lzwjava.github.io)中创建一个Shell脚本。

  1. 创建Shell脚本 在根目录中创建一个名为multimark的文件:
    nano multimark
    

    添加:

    #!/bin/bash
    java -cp scripts/benchmark MultiMark
    

    保存并退出。

  2. 使其可执行
    chmod +x multimark
    
  3. 运行脚本 从根目录:
    ./multimark
    

    这运行Java程序而不需要切换目录。

  4. 可选:在脚本中编译 如果您希望脚本处理编译(例如,如果源文件更改),修改脚本:
    #!/bin/bash
    javac scripts/benchmark/MultiMark.java
    java -cp scripts/benchmark MultiMark
    

关键注意事项

如果您希望将此与Python脚本集成或需要特定的工作流程(例如,一起运行multimark.pyMultiMark.java),请告诉我!


Back Donate