7

我正在同时处理多个 Liferay 项目(不同的门户、插件、用户和用户组等),并且经常需要在它们之间切换。这个开关需要很多步骤,比如

  • 编辑 portal-ext.properties(更改 Liferay 数据库,并编辑一些自定义项目特定属性),并编辑“portal-setup-wizard.properties”
  • 从 Eclipse 服务器实例中添加/删除 portlet 主题和挂钩,有时清理 Tomcat 的“数据”“Webapps”和“工作”文件夹
  • 转到 Liferay 的控制面板/服务器/插件安装并重新索引 portlet,例如“用户和组织”或“文档和媒体”

因此,我认为使用新的 tomcat 和 JRE 为每个项目创建一个新的服务器实例是一个不错的主意。当我不得不切换项目时,我可以停止旧服务器并启动另一个。起初,我认为(实际上被建议)使用相同的 Liferay Plugins SDK(6.1.0)应该没问题,只要服务器实例是相同的版本

实际上,这并不是 100% 完美的。虽然大部分工作已经完成,但这里和那里都有一些问题,比如没有正确部署主题,没有应用挂钩等。据我了解,有一些 [Liferay SDK] - [Liferay Server] 绑定,并且这意味着只有 1 个服务器(我创建的第一个)可以完全工作。例如,通过调查 [Liferay SDK 文件夹]/bild.[用户名].properties,我可以看到一些引用特定服务器/JRE 位置的属性:

    app.server.portal.dir
app.server.lib.global.dir
app.server.deploy.dir
app.server.type
app.server.dir

所以,我的问题是,我应该如何处理多个 Liferay 项目?

  1. 多服务器实践是处理多个项目的好方法吗?
  2. 如果是,我应该为每个服务器创建不同的 SDK 吗?也许还有一个不同的 Eclipse 工作区?或者有什么方法可以使用相同的 SDK
  3. 使用不同 Liferay 版本的服务器怎么样?
4

4 回答 4

4

就个人而言,我为每个项目设置了自己的源、tomcat、数据库等,即使这意味着重复。如今,存储很便宜,这使这成为可能。当然,您的里程可能非常高,但我想我会与您分享我的设置。

我有一个项目目录,其中包含我的所有项目,如下所示:

/projects
    /foo-project
    /bar-project
    /my-project

在我的一个项目中

/my-project
    /tomcat
        /bin
        /conf
        ...
    /src
        /portal
            ... my portal source ...
        /plugins
            ... my plugin source ...
    /portal-ext.properties
  • 然后,我将 tomcat 设置为使用不同的端口(8080、8081、8082 等),这样如果我必须或想要的话,我可以让它们全部运行。
  • 我设置 Liferay 为每个 Liferay 实例使用不同的数据库。
  • 我把它portal-ext.properties作为tomcat 目录的兄弟,Liferay 将读取这个文件(假设默认行为)。这提供了快速简便的编辑以及弄清楚您是如何设置每个项目的。

优点应该很清楚。您可以从一个项目“走开”进入另一个项目,而无需拆除和设置。当你回来的时候,一切都还是你离开时的样子。如果您想回答有关您尚未从事的项目的问题,上下文切换也更快且更有帮助。

根据每个项目的复杂性,多实例可能不适合您。Hooks 和 EXT 可能会相互冲突,并且您的项目似乎已经存在这种情况。

如果你能负担得起空间(不多),这是我作为 Liferay 开发人员找到的最快的方式。

于 2013-04-27T00:06:54.593 回答
3

如果我们开始在我们公司开展一个新的 Liferay 项目,我们会设置:

  • 一个新的数据库模式,
  • 一个新的、干净的 Liferay 服务器与该模式连接,并且
  • 一个全新的 Eclipse 工作区,带有
  • 一个干净的 SDK 项目

只有这样,您才能确保拥有完全独立的项目。要切换到另一个项目,只需关闭当前的 Liferay 服务器,启动新的服务器并切换到 Eclipse 中的正确工作区。这一切都不会超过 2 分钟,比共享工作区和服务器时必须执行的所有清理操作要少得多。

在我看来,这是大多数开发团队的做法。

于 2013-04-26T13:08:06.360 回答
3

为什么要在一台计算机上处​​理所有这些复杂问题?我使用 Oracle VirtualBox 并为每个项目设置一个单独的 VM。即使我在笔记本电脑上工作,它也有 8 个内核,我将内存增加到 16GB,并为每台机器设置了 4GB 的 RAM。

我可以同时运行多个虚拟机,并将所有活动项目设置为 Chrome 中的主页。使用桥接网络,每个 VM 都有自己的 IP 地址,它们都在 8080 上侦听。

另一个好处是,虽然我的主要项目是使用 Eclipse Indigo 和 LR 6.1 CE GA1 开发的,但我还有另一个使用 Eclipse Juno、其特定 IDE 插件和 LR 6.1.1 CE GA2 的项目。所以它也可以作为一个新版本的测试器。

VirtualBox 是免费的。内存很便宜。请记住,您可以在不关闭虚拟机的情况下让虚拟机进入睡眠状态。这大约需要 10-20 秒,再次唤醒它需要 30-60 秒。

于 2013-04-30T11:25:32.750 回答
1

最简单的解决方案是:

创建 3 个不同的用户,Liferay SDK 的bundle.properties 文件对于每个用户都是独立的。因此,假设您想使用相同的 sdk 运行 3 台服务器。创建3个文件,如

bundle.user1.properties bundle.user2.properties bundle.user3.properties

现在,当您想为服务器 1 部署某些东西时,使用 user1 登录服务器并尝试部署 portlet,这将读取 bundle.user1.properties 并将 portlet/hook 部署到指定位置。

希望这将解决您的部署问题。

此外,当您有 3 个用户时,您可以在不同的用户帐户中同时运行 3 个不同的服务器,这样,它们将是安全的,并且除了管理员之外,没有人可以关闭相同的。

希望这可以帮助!

于 2013-04-29T08:13:29.677 回答