我正在与可怕的java.lang.LinkageError斗争。这就是我想要做的。 Bundle A由一个类TestA组成,它调用类B中的方法,在Bundle B中托管。作为方法调用的一部分,TestA将Solrj类(org.apache.solr.common.SolrInputDocument)传递给TestB。这是pom配置。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.0.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>com.test.solr.api;version=1.1.0,
org.apache.solr.common.*,
org.apache.solr.client,
org.apache.solr.client.solrj;</Export-Package>
<Import-Package>com.test.model.*;version="[1.0.0,2.0.0)",
*;resolution:=optional</Import-Package>
<Embed-Dependency>solr-solrj,zookeeper,httpcore,httpmime,httpclient,commons-collections,commons-lang,commons-collections,commons-io,commons-logging;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-ClassPath>.,{maven-dependencies}</Bundle-ClassPath>
<Include-Resource>{maven-resources}, {maven-dependencies}</Include-Resource>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.0.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>com.test.postprocess.api;version="[1.0.0,2.0.0)",</Export-Package>
<Import-Package>com.test.solr.api;version="[1.0.0,2.0.0)",
javax.jws,
javax.wsdl,
javax.xml.bind,
javax.xml.bind.annotation,
javax.xml.namespace,
javax.xml.ws,
META-INF.cxf,
META-INF.cxf.osgi,
org.apache.cxf.bus,
org.apache.cxf.bus.spring,
org.apache.cxf.bus.resource,
org.apache.cxf.configuration.spring,
org.apache.cxf.resource,
org.apache.cxf.jaxws,
org.apache.cxf.transport.http,
!org.jvnet.staxex,
!org.relaxng.datatype,
!com.sun.javadoc,
!com.caucho.burlap.,
org.apache.solr.,
org.w3c.dom,
org.apache.xpath.jaxp,
;resolution:=optional</Import-Package>
<Embed-Dependency>commons-codec,xstream,commons-io,httpcore,httpclient,httpmime;scope=compile|runtime</Embed-Dependency>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-ClassPath>.,{maven-dependencies}</Bundle-ClassPath>
<Include-Resource>{maven-resources}, {maven-dependencies}</Include-Resource>
</instructions>
</configuration>
</plugin>
如您所见,我正在捆绑包B中导出org.apache.solr.common。,org.apache.solr.client和org.apache.solr.client.solrj包,该包正在捆绑中导入A.
但是我得到了以下运行时异常。
java.lang.LinkageError:加载器约束违规:加载器(org / apache / felix / framework / ModuleImpl $ ModuleClassLoaderJava5的实例)以前为名称为“org / apache / solr / common /”的其他类型启动加载SolrInputDocument“
不确定我缺少什么。我正在使用servicemix 4.4.0。
任何指针都将受到高度赞赏。
-Thanks,