我在我的 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>
这些 jar 具有导入包的类,但据我所知,它们都有一个 MANIFEST.MF,它有自己的(准确的)Import-Package 语句列表。
但是,当我构建我的项目(使用 Maven 和捆绑插件)时,它会报告错误,因为它无法解析对某些类的引用。具体错误是:
Unresolved references to [com.sun.tools.javac, javax.naming, javax.naming.spi, javax.servlet, javax.servlet.http, javax.sql, javax.transaction.xa]
所有这些错误都来自 com.springsource.org.h2-1.0.71.jar 并且所有这些包都导入到该 jar 的清单中。
我无法理解:
- 为什么 Maven 捆绑插件会抱怨,如果这些包已经在 com.springsource.org.h2-1.0.71.jar 的 MANIFEST>MF 中导入
- 为什么问题仅来自 com.springsource.org.h2-1.0.71.jar ?我尝试删除那个特定的 jar 并且构建顺利进行,即使 com.springsource.org.apache.lucene.search-2.3.2.jar 在它的 MANIFEST.MF 中也有几个 Import-Package 条目?
关于第二点,我做了一些调查,感觉是有规律的。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 文件的规则是什么?他们的导入(即使它们在 Import-Package 中指定)是否必须在主项目的 pom 中列出?或者这是 Maven 捆绑插件强制执行的东西?如果是后者,有没有办法摆脱强制执行?