未解决的要求:导入包: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 文件夹中。
祝你好运!
您自己找到了复杂的解决方案,有两种更简单的方法:
使用目标平台。假设您正在使用 Liferay Workspace,您的工作区根目录中的 gradle.properties 有一个条目 liferay.workspace.target.platform.version
。将其设置为 7.3.5
版本将自动采用
通过设置目标平台甚至可以自动检测所需的模块,并将您的依赖项声明为
依赖项{
compileOnly 组:“com.liferay.portal”,名称:“release.portal.api”
}
这甚至可以找出您需要依赖的确切模块(超过 1000 个)。诚然,它有点违背模块化的整个概念(要了解您的依赖性),但它非常方便。
我已经下载 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 文件夹中。
祝你好运!
您自己找到了复杂的解决方案,有两种更简单的方法:
使用目标平台。假设您正在使用 Liferay Workspace,您的工作区根目录中的 gradle.properties 有一个条目
liferay.workspace.target.platform.version
。将其设置为7.3.5
版本将自动采用通过设置目标平台甚至可以自动检测所需的模块,并将您的依赖项声明为
依赖项{ compileOnly 组:“com.liferay.portal”,名称:“release.portal.api” }
这甚至可以找出您需要依赖的确切模块(超过 1000 个)。诚然,它有点违背模块化的整个概念(要了解您的依赖性),但它非常方便。