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

未解决的需求:导入包:com.liferay.portal.kernel.portlet.bridges.mvc;版本=";[2.0.0,3.0.0)”;,liferay,liferay-7,tomcat9,liferay-7.3,Liferay,Liferay 7,Tomcat9,Liferay 7.3,我已经下载并尝试部署一个HelloWorldPortlet用于测试目的,它与Tomcat捆绑在一起。 我正在使用Liferay Developer Studio(与旧的Eclipse相同)来开发和部署portlet。版本3.8.1.202004240132-ga2 我还创建了一个类似于中的服务器,该服务器使用的是已下载包中的tomcat 9.0.37 在上面的步骤之后,我按照中的步骤创建模块项目并将其部署到已经启动的tomcat服务器上 我在为此目的创建的小部件页面中添加了portlet/wi

我已经下载并尝试部署一个HelloWorldPortlet用于测试目的,它与Tomcat捆绑在一起。 我正在使用Liferay Developer Studio(与旧的Eclipse相同)来开发和部署portlet。版本3.8.1.202004240132-ga2 我还创建了一个类似于中的服务器,该服务器使用的是已下载包中的tomcat 9.0.37

在上面的步骤之后,我按照中的步骤创建模块项目并将其部署到已经启动的tomcat服务器上

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

然后,与管理员用户登录,我进入控制面板->应用程序管理器并搜索我的Portlet。它显示为“已安装”,我可以激活它。在我点击“激活”后,Eclipse日志开始写入:
错误[http-nio-8080-exec-8][PortletServlet:119]javax.portlet.portleteException:org.osgi.framework.BundleException:无法解析模块:VictorTestPortlet[2716]u未解析的需求:导入包: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"
现在看起来是这样的:

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服务器实例中的版本相同-您可以通过访问
portal kernel.jar
并查看其MANIFEST.MF文件中的密钥“Bundle version”来找到它。jar位于…portal-tomcat-7.3.5\tomcat-9.0.37\lib\ext文件夹中


祝你好运!

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

  • 使用目标平台。假设您使用的是Liferay Workspace,则工作区根目录中的gradle.properties有一个条目
    Liferay.Workspace.target.platform.version
    。将其设置为
    7.3.5
    ,版本将自动获取

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

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


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

    对于Liferay来说,了解依赖性版本基本上可以归结为一个问题“目标liferay服务器上部署了哪些确切的模块版本?"这是一项巨大的升级任务。为您所依赖的所有liferay模块设置一个中心目标平台版本可以回答这个问题。因此,我不会说它违背了模块化的概念——它只回答了一行重复的问题。正如我所说:非常方便。代价是忽略了显式依赖项ies(在案例2中)。选项#1仍然为您提供了自动确定版本号的显式依赖关系。已经很好了,但在您所依赖的模块更改名称或分解为多个模块时就不那么方便了。