Как обеспечить загрузку классов внешних jar-файлов при вызове из плагина eclipse? - PullRequest
3 голосов
/ 02 марта 2010

Я разработал плагин eclipse, который ссылается на внешний jar, присутствующий во внешнем каталоге установки. Итак, я добавил запись в мой classpath пакета, как показано ниже:

Bundle-ClassPath: external:C:\mylib.jar

Мой класс загружается правильно - и плагин может обнаружить класс MyClass, присутствующий в этом внешнем lib.
Однако метод a() - я вызываю в классе MyClass не работает.

Метод a () выглядит следующим образом:

public void a()
{
  URL url = this.class.getClassLoader().getResource("META-INF/startup-jar ");
  ...
}

поэтому возвращаемый URL-адрес соответствует каталогу подключаемых модулей eclipse C:\eclipse3.4\test а не физического местоположения внешнего сосуда, которое является C:\mylib.jar

Это приводит к сбою метода a(). Теперь мой вопрос -
Поскольку у меня нет внешнего jar-файла, скопированного в каталог моего плагина (он присутствует только в пути к классам плагина)

как я могу гарантировать, что загрузчик классов получит URL-адрес моего внешнего jar, а не моего каталога плагинов?

Примечание: я не могу изменить механизм загрузки классов во внешнем jar-файле, так как это сторонняя зависимость, и я не могу контролировать код. Поэтому, пожалуйста, предложите решение, которое помогло бы мне правильно загрузить внешний класс JAR, чтобы я мог получить правильный URL.

Большое спасибо за помощь - заранее

Чтобы объяснить немного больше о проблеме, с которой я сталкиваюсь: Мой внешний jar находится внутри установочной директории моего сервера.

Когда класс в моем внешнем jar вызывает URL url = this.class.getClassLoader (). GetResource ("startup-jar")

возвращает URL относительно пути пакета eclipse - Что-то вроде C: \ eclipse3.4 ...

и этот URL используется для получения загрузочного каталога (каталога установки сервера).

Таким образом, он должен был вернуть путь относительно каталога установки сервера, но вместо этого вернуть путь относительно каталога установки eclipse.

Из-за этого я не могу вызывать какие-либо API-интерфейсы на сервере, поскольку каталог установки сервера, который он пытается использовать, неверен.

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

1 Ответ

1 голос
/ 02 марта 2010

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

Если это популярная библиотека с открытым исходным кодом, вы, вероятно, можете найти ее с метаданными OSGi, добавленными в репозиторий Spring: www.springsource.com/repository/app

.

В общем, я бы не рекомендовал шаблон ссылки на внешние JAR, как вы описали в своем вопросе.

...