使用Spring支持创建简单的Eclipse插件时遇到问题。
我的主要目标是使用Apache Camel框架开发多模块Eclipse插件项目。这就是为什么我试图将Spring用作IoC容器(Camel具有良好的Spring DSL)和Apache Maven作为构建工具。
现在我有一个非常简化的子目标:为Eclipse插件创建简单的Maven项目(如HelloWorld),它可以通过bundle-context.xml文件创建Spring的ApplicationContext,从那里获得一些简单的依赖项,例如,print它控制台。
我从spring-osgi-bundle-archetype 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的所有依赖项都嵌入到目标/依赖项中,并在MANIFEST的Bundle-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的问题。
有没有人有使用Spring支持创建Eclipse插件的经验?欢迎任何建议和意见。也很高兴看到一些带有Spring支持的OpenSource Eclipse插件。
答案 0 :(得分:1)
我建议你使用eclipse项目的清单第一个版本,这样你就可以使用eclipse中的所有工具来获取插件,参见tycho和页面末尾的例子。
编辑:tycho页面上的链接已损坏,通过github insteat获取示例,其示例文件夹
答案 1 :(得分:1)
解决方法是在代码中添加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>
并在Eclipse PDE中的Run / Debug插件之前调用mvn package
。