Java classpath: Неверный файл класса: содержит неправильный класс

#java #compiler-errors #package

#java #ошибки компилятора #пакет

Вопрос:

У меня следующая структура проекта:

 MyProject
     -Main.java
     -package1
         -ClassA.java
         -package2
             -ClassB.java
             -ClassC.java
  

После компиляции с использованием javac *.java из MyProject папки файлы .class создаются в папках, где расположены соответствующие файлы .java.

Это обзор моего Main.java файл:

 import package1.*;
import package1.package2.*;

class Main {

    public static void main(String[] args) {
        ClassB test = new ClassB();
    }

}
  

И это ошибка, которую я получаю при компиляции:

 Main.java:15: error: cannot access ClassB
        ClassB test = new ClassB();
        ^
  bad class file: ./package1/package2/ClassB.class
    class file contains wrong class: package2.ClassB
    Please remove or make sure it appears in the correct subdirectory of the classpath.

  

Я убедился, что структура пакета соответствует папкам.

Кроме того, я попытался скомпилировать проект вручную, используя

 javac -cp package1/package2 package1/package2/*.java
javac -cp package1 package1/*.java
javac -cp . Main.java
  

Что, к сожалению, приводит к той же ошибке.

Мой вердикт заключается в том, что эта проблема вызвана расположением файлов .class в package2, с которыми компилятор, похоже, не может справиться должным образом, но я не уверен, как изменить структуру моего проекта.

Комментарии:

1. Можете ли вы показать свой ClassB.java ? Содержит ли он package package1.package2; объявление?

2. На самом деле он просто содержал package package2; , что, по-видимому, было проблемой. Спасибо, что сэкономили мое время 🙂

3. Нет проблем, рад, что это было так 🙂