`java myClass` не находит файл .class, когда` java myClass.java` обнаруживает? (OpenJDK) - PullRequest
0 голосов
/ 18 июня 2020

Когда я запускаю java -cp foo.jar MyClass, я все время получаю сообщение об ошибке:

Error: Could not find or load main class PrimVsKruskal
Caused by: java.lang.ClassNotFoundException: PrimVsKruskal

Но когда я запускаю java -cp foo.jar MyClass.java, он работает нормально. Это происходило в разных файлах в разных каталогах, и да, я запустил javac -cp foo.jar MyClass.java для генерации байт-кода .class.

Я также пробовал запустить java -cp foo.jar MyClass.class (та же ошибка, но с '.class' в конце каждой строки) и убедился, что просто не очень хорошо понимаю команду java. Когда я удаляю файл MyClass.class и запускаю java -cp foo.jar MyClass.java, он работает нормально, что, кажется, предполагает, что java компилирует свой собственный байт-код при запуске с файлом. java, а не просто интерпретирует байт-код. Это правда?

Любая помощь в этом или просто лучшее понимание java, чем то, что я могу почерпнуть из справочных страниц, будет очень признательна! Я искал в Интернете, но когда мне нужно было искать «java command», ничего подходящего не обнаружилось.

Не уверен, имеет ли это значение, но я использую OpenJDK version "11.0.7" 2020-04-14 на Ubuntu 18.04.4.

Спасибо!

============

Редактировать из-за комментария:

Файл .jar - это algs4.jar из https://algs4.cs.princeton.edu/code/ . Минимальный рабочий пример, который дает мне те же самые ошибки:

import edu.princeton.cs.algs4.*;

public class MyClass{

   public static void main(String[] args) {
        System.out.println( "I am working! ");
    }
}

1 Ответ

1 голос
/ 18 июня 2020

Ваша проблема в том, что, когда вы включаете параметр -cp , вы переопределяете путь к классу.

Итак, если ваш файл .class находится в текущем пути, вы должны написать:

// Linux or MacOS
java -cp ".:foo.jar" MyClass

// Windows
java -cp ".;foo.jar" MyClass

Статья по теме: Является ли текущий путь `.` в пути к классам по умолчанию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...