在 liferay 7 中的自定义主题内创建一个 portlet

Create a portlet inside of a custom theme in liferay 7

我知道在 Liferay 中可以使用以下代码将预定义的 Portlet 嵌入到主题的 .ftl 文件中:

<@liferay_portlet["runtime"]
    portletProviderAction=ACTION
    portletProviderClassName="CLASS_NAME"
/>

但我想在主题内创建一个新的 portlet(及其所有 Java 类)。例如,我的主题项目的示例骨架可以在下面找到。

我的问题是,在 Liferay 7 中是否可以在主题中包含一个完整的 portlet 并且最终用户可以访问该 portlet? (最终用户应该能够使用管理页面右侧的添加菜单将其添加到他们想要的任何位置)。

如果是,我应该在哪里放置我的 Java 代码?我应该如何部署和构建它?有例子吗?

它的一个好处是在一个包中有一个包含许多不同的合适的自定义主题的主题,您可以与他人分享。

这些天我远离主题,但了解它们主要部署为网络应用程序,WAR 文件(Liferay 在内部将其转换为 WAB 包)。虽然您可以在 WAR 文件中包含 portlet,但 Liferay 7 和 DXP 可以很好地与许多较小的插件配合使用,并且通过将 portlet 打包到 OSGi 包中您会更加灵活。

除非您使用仍然需要 WAR 打包的技术来实现您的 portlet,否则将所有内容打包到同一个 WAR 文件中并不会给您带来很多好处。更新 portlet 会导致您也总是必须更新主题和与它一起打包的所有其他内容——您可以使用这一代 Liferay 做得更好。

我的建议是将portlet 打包为portlet,将主题打包为主题。插件的数量不再重要,就像在早期版本中一样。事实上,现在 Liferay DXP 的默认安装中有 500 多个模块(插件)。除了要安装的文件数量之外,没有必要减少插件的数量,也没有任何好处。这是我最不担心的事情。