Как создать плагин Eclipse с поддержкой Spring? - PullRequest
0 голосов
/ 25 марта 2011

У меня проблема при создании даже простого плагина Eclipse с поддержкой Spring.

Моя главная цель - разработать многомодульный проект плагина Eclipse с использованием фреймворка Apache Camel.Вот почему я пытаюсь использовать Spring в качестве контейнера IoC (у Camel хороший Spring DSL) и Apache Maven в качестве инструмента для сборки.

Теперь у меня очень упрощенная подцель: создать простой проект Maven для плагина Eclipse (как HelloWorld), который может создать SpringConfision ApplicationContext с помощью файла bundle-context.xml, получить оттуда простую зависимость и, например, вывести ее на консоль.

Я начал с spring-osgi-bundle-archetypeархетип.Я пытаюсь использовать maven-bundle-plugin , но безуспешно.В настоящее время у меня есть следующая конфигурация в pom.xml:

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.4</version>
            <extensions>true</extensions>
            <configuration>
                <manifestLocation>META-INF</manifestLocation>
                <ignoreMissingArtifacts>true</ignoreMissingArtifacts>
                <instructions>
                    <Bundle-SymbolicName>${bundle.symbolicName}; singleton:=true</Bundle-SymbolicName>
                    <Bundle-Version>${pom.version}</Bundle-Version>
                    <!-- | assume public classes are in the top package, and private classes 
                        are under ".internal" -->

                    <Export-Package>!${bundle.namespace}.internal.*,${bundle.namespace}.*;version="${pom.version}"</Export-Package>
                    <Private-Package>${bundle.namespace}.internal.*</Private-Package>

                    <Import-Package>.,*;resolution:=optional</Import-Package>
                    <Bundle-Activator>${bundle.namespace}.Activator</Bundle-Activator>
                    <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
                    <Require-Bundle>org.eclipse.ui,org.eclipse.core.runtime</Require-Bundle>
                    <Bundle-RequiredExecutionEnvironment>JavaSE-1.6</Bundle-RequiredExecutionEnvironment>
                    <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
                    <Embed-Directory>target/dependency</Embed-Directory>
                    <Embed-StripGroup>true</Embed-StripGroup>
                    <Embed-Transitive>true</Embed-Transitive>
                </instructions>
            </configuration>
        </plugin>

Эта конфигурация может генерировать MANIFEST.MF с большим количеством импортированных пакетов, все зависимости из pom.xml встроены в target / dependency и объявлены в MANIFESTBundle-Classpath.

Но плагин по-прежнему не работает: есть ошибки, такие как

NoClassDefFound: org.springframework.context.ApplicationContext

или

Нет доступных пакетов экспорта пакета 'org.springframework.context' (если я попытаюсь принудительно добавить этот пакет в Import-Package).

Но архив с этой зависимостью (spring-context-3.0.5-RELEASE.jar) существует в target / dependency и в Bundle-Classpath.

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

У кого-нибудь есть опыт создания плагинов Eclipse с поддержкой Spring?Любые советы и комментарии приветствуются.Также было бы здорово увидеть какой-нибудь плагин OpenSource Eclipse с поддержкой Spring.

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Обходным решением было добавить в pom.xml следующий код:

        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

и вызвать mvn package перед плагином Run / Debug в Eclipse PDE.

1 голос
/ 25 марта 2011

Я бы предложил вам сначала собрать манифест для вашего проекта eclipse, чтобы вы могли использовать все инструменты из eclipse для плагина, см. tycho и в конце страницы примеры.1003 *

РЕДАКТИРОВАТЬ: ссылки на странице Tycho не работают, примеры можно получить через github insteat, его демо-папка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...