Java 如何创建支持Spring的Eclipse插件?

Java 如何创建支持Spring的Eclipse插件?,java,eclipse,spring,maven,osgi,Java,Eclipse,Spring,Maven,Osgi,我在使用Spring支持创建简单的Eclipse插件时遇到了一个问题 我的主要目标是使用ApacheCamel框架开发多模块Eclipse插件项目。这就是为什么我尝试使用Spring作为IoC容器(Camel有很好的Spring DSL)和ApacheMaven作为构建工具的原因 现在我有了一个非常简化的子目标:为Eclipse插件创建简单的Maven项目(比如HelloWorld),它可以通过bundle-context.xml文件创建Spring的ApplicationContext,从中获

我在使用Spring支持创建简单的Eclipse插件时遇到了一个问题

我的主要目标是使用ApacheCamel框架开发多模块Eclipse插件项目。这就是为什么我尝试使用Spring作为IoC容器(Camel有很好的Spring DSL)和ApacheMaven作为构建工具的原因

现在我有了一个非常简化的子目标:为Eclipse插件创建简单的Maven项目(比如HelloWorld),它可以通过bundle-context.xml文件创建Spring的ApplicationContext,从中获得一些简单的依赖项,例如,将其打印到控制台

我从SpringOSGibundle原型开始。我正在尝试使用,但没有成功。目前,我在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>

org.apache.felix
maven捆绑插件
2.3.4
真的
META-INF
真的
${bundle.symbolicName};单例:=true
${pom.version}
!${bundle.namespace}.internal.*,${bundle.namespace}.*;version=“${pom.version}”
${bundle.namespace}.internal*
.,*;分辨率:=可选
${bundle.namespace}.Activator
懒惰的
org.eclipse.ui,org.eclipse.core.runtime
JavaSE-1.6
*;范围=编译|运行时;内联=假
目标/依赖关系
真的
真的
此配置使用大量导入的包生成MANIFEST.MF,来自pom.xml的所有依赖项都嵌入到目标/依赖项中,并在MANIFEST的Bundle类路径中声明

但插件仍然不起作用:存在如下错误

NoClassDefFound:org.springframework.context.ApplicationContext

没有可用的捆绑包导出包“org.springframework.context” (如果我尝试将此包添加到强制导入包)

但是具有这种依赖关系(spring-context-3.0.5-RELEASE.jar)的归档存在于target/dependency和Bundle类路径中

我对OSGi技术不是很有经验,所以我甚至无法理解这是Maven还是OSGi的问题


有没有人有使用Spring支持创建Eclipse插件的经验?欢迎提出任何建议和意见。另外,如果能看到一些支持Spring的开源Eclipse插件,那也太好了。

我建议您首先为Eclipse项目构建一个清单,这样您就可以使用Eclipse中的所有工具来获取插件,请参见本页末尾的示例


编辑:tycho页面上的链接已断开,请通过insteat获取示例,其演示文件夹

的解决方法是在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>

maven依赖插件
复制依赖项
包裹
复制依赖项

在Eclipse PDE中运行/调试插件之前调用
mvn包

对不起,这是我的错。我使用EclipsePDE来测试插件,它没有使用maven打包的包。此外,嵌入Spring模块来实现我的主要目标是不明智的——ApacheCamel支持。该框架不能在OSGi环境中使用常规Spring库。根据文档,应该使用Spring动态模块或EclipseGeminiBlueprint。