Java выбрасывает ClassNotFoundExceptions, несмотря на то, что классы находятся на пути сборки - PullRequest
0 голосов
/ 18 июля 2011

У меня есть два разных java проекта (я буду называть их проект 1 и проект 2 для простоты), загруженных в eclipse, и проект 1 добавлен в путь сборки проекта 2. Я импортировал единственный пакет в src папка проекта 1 в тестовый класс для проекта 2, и в коде этого тестового класса у меня есть простые объявления объектов классов из проекта 1 как таковые:

ProjectOneClass object = new ProjectOneClass();

Этот код компилируется без ошибок, компилятор распознает, что эти классы находятся на пути сборки. Когда я запускаю код как приложение Java через Junit4, программа выдает ClassNotFoundExceptions, когда сталкивается с этими строками кода. Код должен печатать эти ClassNotFoundExceptions в журнал ошибок, но по какой-то причине ничего не печатается. Я использую простой

try {
    ...
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

структура, поэтому я не знаю, почему она не печатает в журнал ошибок.

Распечатка JUnit просто:

Junit execution complete
Summary: 4 succeeded, 3 failed.

Успешные четыре не ссылаются на импортированный пакет проекта 1.

Я перепробовал все способы внесения изменений в конфигурации пути сборки, и ничто не дало никаких обещаний улучшения. Единственное, что, я думаю, можно исправить, это порядок пути сборки, указанный на вкладке «Порядок и экспорт» окна конфигурации пути сборки. Прямо сейчас заказ:

project 2 packages
EAR Libraries
JRE System Libraries
JUnit4
a few JAR files (c3p0, commons-codec, ojdbc6)
project 1

Я точно не знаю, кроется ли проблема здесь или в другом месте. Если кто-то может помочь мне с этим, я был бы очень благодарен. Спасибо за чтение.

Ответы [ 3 ]

1 голос
/ 20 июля 2011

Я разобрался в проблеме.Project 1 использует несколько JAR-файлов, которых Project 2 не имеет в своем пути сборки.Я полагал, что, поскольку в Project 1 эти JAR-файлы установлены в пути сборки, он все равно будет работать нормально.Однако при создании экземпляров классов из Project 1 я обнаружил, что Project 2 требует эти JAR-файлы в своем собственном пути сборки.

Это будет иметь смысл для меня, если бы экземпляры, которые я создавал, были реализациями / расширениями классаиз одного из этих JAR-файлов, но это не так.

Несмотря на это, добавив пару JAR-файлов в Project 2, я исправил проблему.Спасибо всем.

0 голосов
/ 19 июля 2011

Давайте сузим проблему и посмотрим, относится ли она к конфигурации запуска JUnit, или к более общей проблеме, связанной с двумя проектами Eclipse.

Создайте класс в Project 2 с помощью основного метода (String []). В этом методе укажите один или несколько типов в Проекте 1, которые, по-видимому, являются причиной вашего CNFE. Запустите этот класс, используя тип конфигурации запуска приложения Java. (Из вашего поста я предполагаю, что у вас проблемы с запусками, основанными на типе конфигурации запуска "JUnit Test".) Отчет.

Кроме того, в последнее время я видел странное поведение при использовании типа конфигурации запуска JUnit Test с тестами JUnit 4, хотя я не думаю, что он полностью сломан. Так что вы можете попробовать конфигурацию JUnit 3.

0 голосов
/ 18 июля 2011

Вы должны установить конфигурацию запуска для вашего файла класса Project 2.

В Eclipse вы можете щелкнуть правой кнопкой мыши - выбрать Run As - Run Configuration и затем на вкладке classpath убедитесь, что Project 1 добавлен, нажав Add Projects.

...