Par*_*rag 3 osgi maven-bundle-plugin osgi-bundle
我在Bundle-Classpath上放了一些罐子。下面的行显示了我的pom.xml中的条目,该条目使用Felix插件为捆绑包创建manigest.mf。
<Bundle-ClassPath>.,lib/com.springsource.org.h2-1.0.71.jar,lib/com.springsource.org.apache.lucene-2.3.2.jar,lib/com.springsource.org.apache.lucene.search-2.3.2.jar</Bundle-ClassPath>
Run Code Online (Sandbox Code Playgroud)
这些罐子都有导入包的类,但是从我的看到,它们都具有MANIFEST.MF,它具有自己的(准确的)Import-Package语句列表。
但是,当我构建项目(使用Maven和bundle插件)时,它报告错误,因为它无法解析对某些类的引用。具体的错误是:
Unresolved references to [com.sun.tools.javac, javax.naming, javax.naming.spi, javax.servlet, javax.servlet.http, javax.sql, javax.transaction.xa]
Run Code Online (Sandbox Code Playgroud)
所有这些错误都来自com.springsource.org.h2-1.0.71.jar,所有这些软件包都导入了该jar的清单中。
我无法理解:
关于第二点,我做了一些调查,觉得有一种模式。com.springsource.org.apache.lucene.search-2.3.2.jar在清单中指定的所有导入都由com.springsource.org.apache.lucene-2.3.2.jar满足,该文件也已指定在Bundle-Classpath上。
com.springsource.org.apache.lucene-2.3.2.jar(在Bundle-Classpath上)满足的com.springsource.org.h2-1.0.71.jar依赖项未在错误消息,但是,错误消息中列出了Bundle-Classpath上的jar不满足的那些依赖关系。
不太确定发生了什么。关于Bundle-Classpath中指定的jar文件的规则是什么?是否必须在其主项目的pom中列出其清单的导入(即使在Import-Package中指定了导入)元素?还是这是Maven捆绑插件强制执行的事情?如果是后者,是否有办法摆脱执行?
当您通过Embed-Dependency标签嵌入任何jar时,maven-bundle-plugin还将分析该jar并将引用的软件包添加到主机捆绑包Import-Package列表中。通常,根据使用的功能,此类软件包是可选的。例如,在您的用例中,H2 jar依赖于Lucene(某些功能的Servlet API)。如果您的使用场景不需要这些功能,则可以将这些程序包标记为可选
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.5</version>
<extensions>true</extensions>
<configuration>
<obrRepository>NONE</obrRepository>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
..
<Embed-Dependency>
h2
</Embed-Dependency>
<Import-Package>
org.osgi.service.jdbc.*;
org.apache.lucene.*;
javax.transaction.*;resolution:=optional,
*
</Import-Package>
</instructions>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在上面的配置中,我们将此类软件包标记为可选。主要问题是根据您的使用情况确定包装清单
一种快速而肮脏的方法是将所有标记为可选导入。应该作为不得已的手段。由于某些有效的导入将被标记为可选,而OSGi fwk将无法对其进行检查。
<Import-Package>
*;resolution:=optional
</Import-Package>
Run Code Online (Sandbox Code Playgroud)
还要注意,H2 jar是有效的OSGi捆绑包,因此您可以直接部署它。
| 归档时间: |
|
| 查看次数: |
28930 次 |
| 最近记录: |