ENargit
@ENargit

Как создать плагин к Eclipse c использованием Spring?

Добрый день!


Возникла проблема при создании плагина к Eclipse. Он должен использовать Spring DI, а также много модулей и зависимостей и я решил пытаться использовать Apache Maven для его сборки.


Изначально взялся за maven-bundle-plugin.


Конфигурация:
<pre>
&lt;plugin&gt;
	&lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
	&lt;artifactId&gt;maven-bundle-plugin&lt;/artifactId&gt;
	&lt;version&gt;2.3.4&lt;/version&gt;
	&lt;extensions&gt;true&lt;/extensions&gt;
	&lt;configuration&gt;
		&lt;manifestLocation&gt;META-INF&lt;/manifestLocation&gt;
		&lt;ignoreMissingArtifacts&gt;true&lt;/ignoreMissingArtifacts&gt;
		&lt;instructions&gt;
			&lt;Bundle-SymbolicName&gt;${bundle.symbolicName}; singleton:=true&lt;/Bundle-SymbolicName&gt;
			&lt;Bundle-Version&gt;${pom.version}&lt;/Bundle-Version&gt;
						
			&lt;Export-Package&gt;${bundle.namespace}.*;version=&quot;${pom.version}&quot;&lt;/Export-Package&gt;

		
			&lt;Import-Package&gt;.,*;resolution:=optional&lt;/Import-Package&gt;

			&lt;Bundle-Activator&gt;${bundle.namespace}.Activator&lt;/Bundle-Activator&gt;
			&lt;Bundle-ActivationPolicy&gt;lazy&lt;/Bundle-ActivationPolicy&gt;
			&lt;Require-Bundle&gt;org.eclipse.ui,org.eclipse.core.runtime&lt;/Require-Bundle&gt;
			&lt;Bundle-RequiredExecutionEnvironment&gt;JavaSE-1.6&lt;/Bundle-RequiredExecutionEnvironment&gt;

			&lt;Embed-Dependency&gt;*;scope=compile|runtime;inline=false&lt;/Embed-Dependency&gt;
			&lt;Embed-Directory&gt;target/dependency&lt;/Embed-Directory&gt;
			&lt;Embed-StripGroup&gt;true&lt;/Embed-StripGroup&gt;
			&lt;Embed-Transitive&gt;true&lt;/Embed-Transitive&gt;
		&lt;/instructions&gt;
	&lt;/configuration&gt;
&lt;/plugin&gt;
</pre>



Так, плагин генерирует всё в том виде, в котором я хотел бы это видеть (все зависимости из pom.xml встраиваются в bundle по пути target/dependency), практически все пакеты импортируются (объявляются в Import-Package в MANIFEST.MF).


Однако плагин не работает, ругается на отсутствие класса org.springframework.context.ApplicationContext, хотя архив с ним лежит в target/dependency плагина и подключен в Bundle-Classpath. В Import-Package пакет не объявлен, при попытке его явно там объявить — сыпятся другие ошибки, типа

No available bundle exports package 'org.springframework.context'<br/>
No available bundle exports package 'groovy.lang'<br/>
No available bundle exports package 'org.apache.wicket'<br/>
... Еще штук 30 ошибок, абсолютно не связанных с org.springframework.context и с проектом вообще (Groovy и Wicket вообще в workspace поиском не находятся, транзитивных зависимостей вроде тоже нет) ...<br/>



Возможно, что проблема от недостатка у меня опыта работы c OSGi. Приветствуется любая помощь.


Этот проект — моя предстоящая дипломная работа, очень хочется сделать на ее основе собственный OpenSource проект. Но для этого нужно хотя бы запустить его.
  • Вопрос задан
  • 3378 просмотров
Пригласить эксперта
Ответы на вопрос 1
ENargit
@ENargit Автор вопроса
Решил самостоятельно, как написано тут.

К сожалению, данный подход вообще не оправдал себя. Встроить модули в плагин Spring_а получилось, но при этом потерялись преимущества модульной архитектуры (если 2му плагину потребуется Spring — его опять придется подкладывать его в архив).

Кроме того, фреймворк Apache Camel, ради которого все затевалось, не умеет работать в OSGI окружении с обычным спрингом. Видимо, нужно переделывать всё на использование Spring DM / Eclipse Gemini Blueprint
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы