Liferay 模块与 Liferay 插件的区别
Liferay 7.0 较之 Liferay 6.2,有了巨大的变化。最显著的就是引入了基于 OSGi 的模块化的开发机制。虽然还是使用基于 Eclipse 的 Liferay IDE 进行开发,但是开发及构建方式大不一样。Liferay 7.0 开发主要使用的 Liferay 模块项目。

而之前的版本大多使用 Liferay 插件项目进行开发。

今天我们就来讨论下 Liferay 模块与 Liferay 插件的区别。
| Liferay 模块 | Liferay 插件 |
|---|---|
| 从 Liferay 7.0 开始引入。 | 从 Liferay 开始就引入了,一直到 Liferay 7/DXP。 |
| 基于 OSGi 框架。 | 基于传统的Java Web 应用框架,就像我们使用更多的 J2EE Web 应用框架一样。 |
| 运行在 OSGi 运行时环境中。 | 运行在传统的应用服务器中,如Tomcat、JBoss、Glassfish。 |
| 也可以称为 OSGi bundle,打包为 JAR 文件。 | 是 Web 应用,打包为 WAR 文件。 |
| Liferay模块提供了帮助OSGi的动态组件注入,因此我们可以将大部分功能作为独立组件,并且在需要时可以轻松地注入到其他组件中。 | 就像独立的 Web 应用,不能在两个 Web 应用之间共享任何东西。它更加耦合。如果我们想共享一些类,我们必须把这些 jar 文件放在一些全局类加载器中,然后其他的 web 应用可以使用这些类。 |
| 可以避免所有类加载器问题 | 会碰到更多类加载器问题 |
| No Class Definition Found、Class Not Found 等运行时错误不会出现在运行时中。 | 在运行时中会频繁地遇到 *No Class Definition Found*、*Class Not Found* 等运行时错误。 |
| 具有不用的类型,如 Portlet 模块、Hook 模块。主题和布局部分支持模块化。 | 具有不同的类型,如 portlet、theme、ext、layout 和 hook。 |
| 基于 OSGi 框架开发的,使用了声明式服务(DS)、Apache Blueprint 和 OSGi API 等好几种框架来部署模块。 | 使用 J2EE Web 应用框架,如 Struts、Spring、Liferay MVC、JSF 等。 |
| 遵循3层架构进行应用开发,分别是持久、服务和表示层。 | 使用相同的3层架构进行应用开发。 |
| 通常将模块开发分成独立的模块,持久层模块、服务层模块、Web层模块。 | 全部三层打包成一个 WAR 文件。 |
| 支持动态部署功能,可以在不取消部署模块的情况下停止和启动模块。 | 必须从服务器取消部署 WAR 文件才能删除功能。 |
| 使用 Apache Gogo shell 命令行界面(CLI)来管理 OSGi 运行时环境中的 Liferay 模块。例如停止、启动、激活和停用。Liferay Portal 管理界面也可以管理这些 Liferay 模块。 | 没有任何命令行界面取消部署,我们必须从服务器上移除插件 WAR 文件。某些企业级应用服务器有管理功能来做这些事情。Liferay Portal 管理界面也可以管理这些 Liferay 模块。 |
| 部署 Liferay 模块之后,就可以在 Liferay Portal 服务器的 OSGi 目录中找到。 | 所有 Liferay 插件都可以在 Liferay Portal 服务器的 webapps 目录中找到。 |
| 具有重要的配置文件 METAINF,就像模块部署配置文件一样,拥有 OSGi 运行时环境要使用的更多信息。 | 具有 web.xml 文件,并由 Portlet/Servlet 容器使用。 |
| 将所有 xml 配置文件信息转换为声明性服务(DS)组件属性。像 portlet.xml、liferay-portlet.xml 和 liferay-display.xml 文件的标签和值。 | 使用 XML 进行配置,例如 portlet.xml、liferay-portlet.xml 和liferay-display.xml。 |
| 如果 Liferay 应用有更多的功能,那么我们将其分成多个独立的模块,这些模块在 OSGi 环境下可以非常容易地相互通信。 | 在 Liferay 插件开发中,模块化并不是那么容易,所以不得不将所有文件保存在单个 WAR 文件中。 |
| 引入了一个名为 BLADE CLI 的新工具来开发 Liferay 模块。 | 用插件 SDK 来开发 Liferay 应用。 |
| 拥有 Liferay IDE、Liferay Studio、BLADE CLI 等开发工具。 | 拥有 Liferay IDE、Liferay Studio 等开发工具。 |
| 支持 Gradle 和 Maven 构建环境。 | 支持 ANT 和 Maven 构建环境。 |
| 使用 Liferay Workspace 概念来管理跨平台的应用程序及其配置。 | 使用插件 SDK 来开发和管理插件。 |
| 使用了 OSGi API、声明式服务和 Apache Blueprint 框架。所以有限地选择使用像 Spring 这样流行的应用框架。Liferay 仍然不完全支持 Spring 模块,这意味着有些时候必须使用 WAR 部署。 | 可以使用任何流行的 J2EE Web 应用框架,比如 Spring、Struts 和 JSF。 |
| Liferay 模块提供了基于微服务架构的应用程序。 | 为了使用微服务架构,必须依赖其他框架,如 Spring Micro 服务。 |
| Liferay 模块具有动态组件开发功能,因此我们可以轻松地在任何时间点打开和关闭该功能。 | Liferay 插件不像动态组件开发那样在一个插件应用程序中有很多功能。 如果我们删除一个插件,就会可以关闭很多功能。 |
| Liferay 模块提供了简单的部署过程,可以轻松地从一个环境移动到另一个环境。Liferay Workspace 提供了这个能力。 | Liferay 插件部署过程以及从一个环境转移到另一个环境的过程较为繁琐。并没有像 Liferay Workspace 这样的特殊机制。 |
| 使用 Bndtools 开发和构建模块。BLADE CLI、Liferay IDE、Gradle 和 Maven 等工具都在内部使用 Bndtools。 | 遵循 J2EE Web 应用开发,所以 Maven Liferay 插件或 Liferay IDE 可以处理开发和部署。 |
转自:https://mp.weixin.qq.com/s/61urrPZo_l5u_zek-LwdUA
浙公网安备 33010602011771号