3

我一直在将一个 Portlet 从 Liferay 6.2 转换为 Liferay 7 的捆绑包。当我部署它时,它无法加载,因为缺少资源:

$ blade sh diag 1084
diag 1084
org.mycompany.caasd.portal-ldap-sync [1084]
  Unresolved requirement: Import-Package: com.liferay.portal.kernel.service; 
version="[1.20.0,2.0.0)"

当我使用 Felix Gogo shell 查看可用的内容时,我看不到任何内核包。这是我应该期望安装的捆绑包,我自己安装,包含在我的捆绑包中,还是我只是没有以正确的方式考虑这个?

4

2 回答 2

1

CE GA4的com.liferay.portal.kernel版本是 2.32.1。因此,如果您使用 gradle 项目为 CEGA4 进行开发,您将在项目中配置依赖项,build.gradle如下所示:

dependencies {
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.32.1"
}

你可以通过查看portal-kernel.jar文件MANIFEST/MANIFEST.MF或者如果你有你的版本的 liferay src,在它自己的任何模块build.gradle文件中找到它。在我的 tomcat 包中,portal-kernel.jarif in tomcat/lib/ext.

除非我误解了你的问题,否则你应该得到你想要的。

有关更多信息,请参阅此处的文档

于 2017-08-11T21:32:52.713 回答
0

当你构建你的包时, bnd 要么

  • 检查您的类路径并为您检测包版本
  • 使用您手动提供的任何版本Import-Package

在您的情况下,它以某种方式检测到com.liferay.portal.kernel.service包的版本是1.20.0. 因此,它生成了“等于或大于当前版本但低于下一个主要版本”的范围,在您的情况下表示为[1.20.0,2.0.0). 那可能是因为您在 claspath 上有旧 jar,或者因为您的Import-Package陈述错误。

只要您不使用在较新版本中添加/更改的功能,这可能编译得很好。但是在运行时,实际的包版本更高(类似于2.32.1),因此它不符合您的要求。由于 OSGi 运行时无法解决您的捆绑包需求,因此捆绑包处于“已安装”状态!

要解决这个问题,您有两个选择:

  • 在旧版 Liferay 上安装你的包(com.liferay.portal.kernel.service包在1.20.0和之间2.0.0
  • 重新编译你的包,确保类路径只包含那些com.liferay.portal.kernel.service包具有版本的 jar,该版本将生成适合你运行时包版本的版本范围。
于 2017-08-16T18:03:37.593 回答