Исключение NoClassDefFoundError при использовании внешней библиотеки в проекте плагина EMF - PullRequest
2 голосов
/ 15 сентября 2010

Я работаю над проектом EMF, в котором я создал модель ecore из файла MDL. Я создал соответствующий файл gencore и сгенерировал код из файла gencore. Хотя у EMF есть собственный механизм сериализации на основе XMI, я хочу поддержать свой проект с помощью собственного механизма сериализации.

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

  1. Создал каталог lib / в моем проекте плагина, куда я поместил внешнюю библиотеку
  2. Добавлена ​​библиотека в путь сборки проекта
  3. Добавлен каталог в bundle-classpath (Manifest.mf)
  4. Добавлен каталог в bin.include для build.properties

Если я пытаюсь запустить свой код, я получаю исключение NoClassDefFoundError, и я не знаю почему. Я создал конфигурацию запуска, где я запускаю проект как приложение Eclipse. Значит, у кого-то есть идея, что мне не хватает?

Заранее спасибо!
Michael

Редактировать: под моим файлом Manifest.mf

Manifest-Version: 1.0  
Bundle-ManifestVersion: 2  
Bundle-Name: de.hs_rm.cs.vs.dsm.OWL  
Bundle-SymbolicName: de.hs_rm.cs.vs.dsm.owl;singleton:=true
Bundle-Version: 1.0.0  
Bundle-ClassPath: lib/,
 .
Bundle-Localization: plugin  
Bundle-RequiredExecutionEnvironment: JavaSE-1.6  
Export-Package: owl,  
 owl.impl,  
 owl.util,  
 rdfs,  
 rdfs.impl,  
 rdfs.util  
Require-Bundle: org.eclipse.core.runtime,  
 org.eclipse.emf.ecore;visibility:=reexport  
Bundle-ActivationPolicy: lazy  

а также мои build.properties

bin.includes = .,\
               model/,\
               META-INF/,\
               plugin.xml,\
               plugin.properties,\
               lib/
jars.compile.order = lib/,\
                     .
source.. = src/
output.. = bin/
source.lib/ = lib/
jars.extra.classpath = lib/owlapi-bin.jar

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

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

  1. Импорт JAR-файлов с помощью «Импорт -> Файловая система»
  2. Добавление JAR-файлов в раздел classpath в Manifest /plugin.xml вкладка времени выполнения
  3. Нажмите «Новый ...», чтобы добавить «.»библиотека обратно в classpath
  4. Убедитесь, что двоичная сборка экспортирует новые JAR-файлы на вкладке Build
  5. Нажмите save
  6. Выберите основной проект в проектев режиме проводника щелкните правой кнопкой мыши и выберите «Инструменты PDE -> Обновить путь к классам».Это добавит недавно добавленные JAR-файлы в путь к классам проекта.

У меня возникли проблемы с последним шагом, так как я сам добавил библиотеку в путь сборкипроект.Каждый раз, когда я делал это затмение, удалял библиотеку из пути сборки при выполнении «Обновить команду classpath».Я повторил шестой шаг, не добавляя библиотеку в путь сборки самостоятельно, и теперь она работает.

Мне немного странно, но теперь это работает.В любом случае я хотел бы поблагодарить вас за вашу помощь!

С уважением, Майкл

0 голосов
/ 15 сентября 2010

Получаете ли вы NoClassDefFoundError при попытке получить доступ к lib или при попытке получить доступ к модели Ecore? Если это последний случай, проверьте, зарегистрирован ли ваш файл emf в файле plugin.xml. Ищите что-то вроде следующей части:

<extension point="org.eclipse.emf.ecore.generated_package">
  <package
       uri="«package URI here»"
       class="«package class name here»"
       genModel="«genmodel location here»"/>
</extension>

Эта часть может отсутствовать, если plugin.xml был сгенерирован до того, как genmodel использовался для генерации, поскольку ни манифест, ни plugin.xml не обновляются в процессе генерации кода.

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

0 голосов
/ 15 сентября 2010

Если вы пишете плагины Eclipse, а не просто старый проект Java, вы должны добавить свою библиотеку в поле classpath вкладки Runtime редактора Manifest.mf.

...