Проблема создания среды выполнения плагина Eclipse — java.lang.NoClassDefFoundError

Я получаю плагин Eclipse: java.lang.NoClassDefFoundError для org/jongo/ResultHandler

Мой исходный код успешно скомпилирован после добавления необходимых файлов JAR. Я добавил эти JAR-файлы, используя проект>путь сборки в качестве справочных библиотек в Eclipse.

Теперь проблема в том, что эти внешние файлы jar не работают во время Runtime.

В моем файле MANIFEST.MF есть только одна банка, а не внешние банки. Не знаю, как добавить сюда внешние банки.

Bundle-ClassPath: Test.jar

Build.properties

source.Test.jar = src/
bin.includes = plugin.xml,\
               META-INF/,\
               Test.jar

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


person Ronak    schedule 20.11.2016    source источник
comment
Является ли ненайденная банка пакетом OSGi? В случае, если да, вы должны добавить банку не во включенные банки, а в зависимости. Если нет, вы также должны добавить его в bin.includes часть build.properties.   -  person Gábor Bakos    schedule 20.11.2016
comment
Спасибо. Теперь работает :)   -  person Ronak    schedule 20.11.2016


Ответы (1)


Никогда не добавляйте jar-файлы непосредственно в путь сборки при создании плагинов.

Вы должны включить все jar-файлы в свой плагин (или как другие плагины), установить Bundle-Classpath и включить jar-файлы в build.properties. Если вы ссылаетесь на другие плагины, просто добавьте их в зависимости вашего плагина.

Вы можете добавить их в MANIFEST.MF с помощью редактора MANIFEST.MF/plugin.xml/build.properties.

На вкладке редактора «Время выполнения» добавьте банки в записи «Путь к классам» (также должна быть запись «.» для вашего основного кода плагина).

На вкладке «Сборка» редактора отметьте все jar-файлы, которые вы хотите включить в плагин. Вы должны поместить банки куда-нибудь в свой плагин (например, в каталог «lib»).

Например, в этом build.properties:

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               plugin.properties,\
               plugin.xml,\
               lib/jogg-0.0.7.jar,\
               lib/jorbis-0.0.15.jar,\
               lib/vorbisspi1.0.2.jar,\
               icons/

У меня есть три банки в каталоге lib.

MANIFEST.MF для этого выглядит так:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: greg.music.ogg;singleton:=true
Bundle-Version: 2.0.0.qualifier
Bundle-Vendor: %plugin.provider
Bundle-Localization: plugin
Require-Bundle: greg.music.core;bundle-version="1.0.0",
 greg.music.resources;bundle-version="1.0.0",
 org.eclipse.core.runtime,
 javazoom.jlgui.basicplayer,
 org.eclipse.e4.core.services;bundle-version="2.0.100"
Bundle-ClassPath: .,
 lib/jogg-0.0.7.jar,
 lib/jorbis-0.0.15.jar,
 lib/vorbisspi1.0.2.jar
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: javax.annotation;version="1.0.0",
 javax.inject;version="1.0.0",
 org.eclipse.e4.core.di.annotations

Вкладка времени выполнения в редакторе: введите здесь описание изображения

Вкладка "Сборка": введите здесь описание изображения

person greg-449    schedule 20.11.2016
comment
Спасибо, Грег, за подробную помощь :) - person Ronak; 20.11.2016