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

Я пытаюсь использовать относительно новый подключаемый модуль Eclipse (http://uqbar-tomcat-xt.sourceforge.net/download.html). У него нет сайта обновлений, поэтому я не могу установить его через пользовательский интерфейс в Eclipse, который обычно разрешает зависимости. Все, что доступно для загрузки, - это один .jar, и в инструкциях на веб-сайте говорится, что его нужно просто поместить в eclipse/plugins. Когда я это делаю, кажется, что это работает, в том смысле, что я получаю новые параметры в Window -> Show View, которые должен добавить подключаемый модуль. Однако, когда я пытаюсь использовать любое из этих представлений, я получаю следующую ошибку:

org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle org.uqbar.eclipse.tomcat.xt (304).
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:125)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:211)
...snip...
Caused by: org.osgi.framework.BundleException: The activator org.uqbar.eclipse.tomcat.xt.UqbarSydeoXtActivator for bundle org.uqbar.eclipse.tomcat.xt is invalid
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:157)
...snip...
Caused by: java.lang.Error: Unresolved compilation problems: 
    The import com.thoughtworks cannot be resolved
    XStream cannot be resolved to a type
    XStream cannot be resolved to a type
    XStream cannot be resolved to a type

На странице зависимостей вышеуказанного сайта перечислены несколько зависимостей, включая XStream. Я попытался загрузить эти .jars отдельно и также поместить их в каталог eclipse/plugins, но это не устранило ошибку. Когда я смотрю на манифест в банке, я вижу:

Bundle-ClassPath: .,commons-logging-1.0.4.jar,xpp3_min-1.1.4c.jar,xstr
 eam-1.3.jar,xstream-benchmark-1.3.jar

Но, очевидно, банки xstream недоступны в пути к классам (где это?). Я не уверен, куда я могу их поместить, чтобы они распознавались плагином.

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

Обновление: видимо ошибка в активаторе, а не в самом плагине. Я попытался импортировать плагин как исходный проект, но каталог src/ пуст. Плагин не отображается в списке доступных для развертывания плагинов, когда я пытаюсь его экспортировать. Так что это до сих пор не решено.


person Kelly Ellis    schedule 09.09.2009    source источник
comment
Рекомендуемый метод ручного добавления подключаемого модуля, начиная с версии Eclipse 3.4, — поместить его в каталог dropins внутри Eclipse. Вы можете обнаружить, что добавление подключаемых модулей в каталог eclipse/plugins не имеет никакого эффекта (это связано с тем, что p2 отвечает за каталог eclipse/plugins).   -  person SteveD    schedule 10.09.2009
comment
На самом деле, размещение его в каталоге dropins не сработало, потому что это расширение плагина, который я уже установил (через пользовательский интерфейс Eclipse), который находится в каталоге плагинов. Но в большинстве других случаев да, дропины — это то, что нужно. Я отвлекся на что-то другое (так оно и есть), поэтому я еще не пробовал решение Рича, но сообщу, когда сделаю это!   -  person Kelly Ellis    schedule 10.09.2009


Ответы (2)


Вы можете определить фрагмент Eclipse с отсутствующей зависимостью от его пути к классам (обычно в каталоге lib фрагмента и указанном в пути к классам в манифесте).

Фрагмент — это специальный тип плагина, который прикрепляется к целевому плагину. Фрагмент объединяется с целевым плагином во время выполнения, поэтому классы в плагине будут иметь доступ к банке.

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

person Rich Seller    schedule 09.09.2009
comment
Хм, я пробовал это, но я все еще получаю ту же ошибку. Кажется, это проблема времени компиляции, и, поскольку фрагменты логически объединяются во время выполнения, это не решает проблему. Должен ли я получить исходный код плагина и перекомпилировать себя? Могу ли я что-нибудь сделать, чтобы исправить это, учитывая, что источник недоступен? Все еще жду известий от разработчиков, которые сделали это. - person Kelly Ellis; 15.09.2009

Исправление Rich Seller будет работать, хотя реальная проблема заключается в дрянном плагине, который указывает кучу сторонних библиотек на Bundle-ClassPath, но на самом деле не включает их! Bundle-ClassPath — это путь к классам внутри пакета, поэтому все библиотеки, на которые есть ссылки, должны быть внутри пакета.

Поскольку исходный код включен, вы можете пересобрать подключаемый модуль с отсутствующими зависимостями (с лицензией), хотя я думаю, что все эти сторонние зависимости должны быть внешними, но это совершенно другое обсуждение того, как писать OSGi. пакеты/плагины Eclipse.

person SteveD    schedule 10.09.2009
comment
К сожалению, исходный код не включен. Все, что они выпустили, это .jar. - person Kelly Ellis; 10.09.2009