未解决的要求:导入包:com.liferay.portal.kernel.portlet.bridges.mvc;版本="[2.0.0,3.0.0)"

Unresolved requirement: Import-Package: com.liferay.portal.kernel.portlet.bridges.mvc; version="[2.0.0,3.0.0)"

我已经下载 Liferay 7.3.5 Community Edition from here 并尝试部署 HelloWorld portlet 以进行测试。它与 Tomcat 捆绑在一起。 我正在使用 Liferay Developer Studio(与类固醇相同的旧 Eclipse)来开发和部署 portlet。版本 3.8.1.202004240132-ga2 我还创建了一个服务器,如 this link - 服务器正在使用已下载包中的 tomcat 9.0.37。

完成上述步骤后,我按照 here 中的步骤创建了一个模块项目并将其部署到已经启动的 tomcat 服务器上。 portlet 出现在已部署部分,但附近有一个红色的“x”:

我在为此目的创建的小部件页面中添加了 portlet/widget,但找不到 portlet:

然后,我以管理员身份登录,转到控制面板 -> 应用程序管理器并搜索我的 Portlet。它显示为“已安装”,我可以激活它。在我点击“激活”后,Eclipse 日志开始写入:ERROR [http-nio-8080-exec-8][PortletServlet:119] javax.portlet.PortletException: org.osgi.framework.BundleException: Could not resolve module: VictorTestPortlet [2716]_ Unresolved requirement: Import-Package: com.liferay.portal.kernel.portlet.bridges.mvc; version="[2.0.0,3.0.0)"_ [Sanitized]

问题:导致此错误的原因是什么?

问题如前所述 - 未找到依赖项。

为了解决这个问题,我进入了 build.gradle 文件,该文件缺少“com.liferay.portal”依赖项的版本。所以,我的台词是这样的:

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel"

现在看起来像这样:

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "9.8.1"

版本 必须 与在您的 Liferay Server 实例中找到的版本相同 - 您可以通过访问 portal-kernel.jar 并查看其 MANIFEST.MF 来找到它键“Bundle-Version”的文件。该 jar 位于 ...portal-tomcat-7.3.5\tomcat-9.0.37\lib\ext 文件夹中。

祝你好运!

您自己找到了复杂的解决方案,有两种更简单的方法:

  1. 使用目标平台。假设您正在使用 Liferay Workspace,您的工作区根目录中的 gradle.properties 有一个条目 liferay.workspace.target.platform.version。将其设置为 7.3.5 版本将自动采用

  2. 通过设置目标平台甚至可以自动检测所需的模块,并将您的依赖项声明为

    依赖项{ compileOnly 组:“com.liferay.portal”,名称:“release.portal.api” }

这甚至可以找出您需要依赖的确切模块(超过 1000 个)。诚然,它有点违背模块化的整个概念(要了解您的依赖性),但它非常方便。