Eclipse classpath и NoClassDefFoundError - PullRequest
       11

Eclipse classpath и NoClassDefFoundError

2 голосов
/ 24 февраля 2010

Я попытаюсь дать здесь как можно больше подробностей, простите, если что-то не имеет значения. У меня есть два проекта в затмении. Проект 1: com.myworkplace.parent, с кодом в одноименном пакете. Проект 2: com.myworkplace.child, с кодом в пакете с тем же именем (я переместил свой код в этот пакет из пакета по умолчанию, если это имеет значение). Насколько я могу судить, оба находятся в моей папке рабочего пространства и структурированы так, как вы и ожидаете.

Я добавил дочерний элемент в путь сборки parent в eclipse, используя Java Build Path -> Projects -> Add. Родительский файл .classpath содержит запись:

    <classpathentry combineaccessrules="false" kind="src" path="/com.myworkplace.child"/>

Я добавляю ссылку на класс com.myworkplace.child.Child в parent, импортирую его, компилирую без ошибок, запускаю и получаю:

java.lang.NoClassDefFoundError: com/myworkplace/child/Child

Что дает?

Редактировать: Родительское приложение - это приложение RCP, может быть OSGI (я действительно не очень разбираюсь в RCP и связанных с ним вещах.) Некоторые поиски в Google заставляют меня поверить, что это как-то связано с этим.

Ответы [ 3 ]

6 голосов
/ 24 февраля 2010

Поскольку ваше приложение является приложением RCP, существует разница между путем к классу eclipse, который используется при редактировании кода, и путем к классу OSGi, который используется во время выполнения. Похоже, вам нужно добавить плагин com.myworkplace.child в список зависимостей плагина com.myworkplace.parent.

Откройте либо plugin.xml, либо META-INF / manifest.mf в родительском проекте. Eclipse должен открыть редактор плагинов PDE (редактор на основе форм для базовых файлов конфигурации). Перейдите на вкладку «Зависимости» внизу и добавьте свой дочерний плагин в список «Необходимые плагины» в левой части формы. Вы также можете добавить пакет com.myworkplace.child в список «Импортированный пакет» справа. Разница между этими двумя понятиями выходит за рамки этого ответа, но вы можете прочитать об этом в документах по затмению сейчас, когда вы (надеюсь) движетесь в правильном направлении.

2 голосов
/ 08 декабря 2010

Мы обнаружили, что даже делая все правильно в проекте eclipse rcp, мы все еще получали такие ошибки. Решение состояло в том, чтобы удалить каталог рабочей области приложения (по умолчанию оно будет хранить настройки рабочей области в .eclipse, но мы настроили наш код, чтобы использовать другой каталог, который не используется совместно с другими компонентами eclipse).

Когда мы удалили этот каталог после перестройки, наше приложение работало. Очевидно, что он как-то сохранял путь к классам вместе с другими настройками, но мы не исследовали точные детали.

(ПРИМЕЧАНИЕ. Это применимо только в том случае, если вы вызвали метод IWorkbenchConfigurer.setSaveAndRestore, передав логическое значение «true», что означает, что ваше приложение будет сохранять и восстанавливать различные параметры rcp после завершения работы приложения и последующего повторного запуска. )

0 голосов
/ 24 февраля 2010

Если ваш код выполняется на сервере приложений, вам необходимо правильно настроить Classpath для этого сервера приложений.

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

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