OSGI Gradle 未解决的要求:导入包:com.opencsv;版本="[3.8.0,4.0.0)" Liferay IDE 3

OSGI Gradle Unresolved requirement: Import-Package: com.opencsv; version="[3.8.0,4.0.0)" Liferay IDE 3

我正在尝试在我的项目中使用 opencsv 库来读取一些 CSV 文件。我在 gradle 中正确添加了此依赖项,它似乎在开发时使用。但是,在使用 OSGI 进行部署时会出现此错误:

Unresolved requirement: Import-Package: com.opencsv;version="[3.8.0,4.0.0)"

也许我正在失去基础知识。我在 jar 内部挖掘,在自动生成的清单中 "Import-Package" 条目中出现 "com.opencsv;version="[3.8.0,4.0.0)”。我认为我的 build.gradle 有问题:

dependencies {
    compile group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.3.0"
    compile group: "com.liferay.portal", name: "com.liferay.util.taglib", version: "2.1.0"
    compile group: "javax.portlet", name: "portlet-api", version: "2.0"
    compile group: "javax.servlet", name: "servlet-api", version: "2.5" 
    compile group: "jstl", name: "jstl", version: "1.2"
    compile group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0"    
    compile group: "com.opencsv", name: "opencsv", version: "3.8"

}

version = '1.0.0'

我相信这个解决方案可能很简单而且很愚蠢,但我做不到。

我会自己回复。我希望这对其他人有所帮助。

对于那些类型的库,您必须执行以下操作:

  • 下载您的 jar 并将其放入您的 main/resources。
  • 在你的bundle.gradle项目中添加

    bundle {
    exclude group: 'group.of.package'
    instruction 'Bundle-ClassPath', '.,nameofjar.jar' 
    instruction 'Embed-Transitive', 'true'}
    
  • 刷新Gradle依赖项

  • 从服务器中删除失败的包。

  • 清理、构建和部署。

我希望这对你有用。如果没有尝试联系我并尝试提供帮助。

如果您使用 liferay gradle 插件或 bnd gradle 插件,另一种选择是将 bnd.bnd 文件添加到您的模块并将此指令放在那里

Private-Package: \
    <your.package.name>.*,\
    com.opencsv.*

这样你就不需要 bundle {...} 块了。 private-package 会将所有引用的文件复制到您的文件 jar 中,这些 类 将在您的包执行期间可用。这里是more reference on the Private-Package: instruction

尝试将 Import-Package: *; version="0";resolution:=optional 添加到您的 bnd 文件中。解决了我的问题,希望也能解决你的问题