我有一个相当大的Grails应用程序,其中包含少量的 Controller 和 View ,以及大量的服务。

现在,我需要为同一站点构建一个“重新设置皮肤”的版本,该站点具有自己的一组 View 和 Controller ( Controller 的工作方式之间有一些细微的差异),但服务集却完全相同。一种选择是通过自定义Grails插件将所有服务移至某种常见的位置,但是我想知道是否还有另一种方法。

我想做的是在controllers文件夹中有两个包com.company.sitea和com.company.siteb,并带有一个环境变量,可以有效地选择使用其中一个。同样,有两组不同的 View ,每组 View 都是基于此环境变量选择的,但是具有共享的taglib。

我找不到执行此操作的任何明显操作,是否有插件或执行此操作的标准方法(或类似方法)?这个想法是,我只有一个代码库,我会打一场 war ,但是这场 war 将部署在两个不同的地方,每个 war 都将为一个特殊的环境变量指定一个值。

最佳答案

我们已经成功地使用了一种模式,在该模式中,第一个应用程序成为了插件。它将作为第一个用例的应用程序运行,并作为第二个用例的插件包含在内。

如果执行此操作(grails应用程序同时是一个应用程序和一个插件),则必须在将该插件作为应用程序运行时将其排除在启动之外。否则,应用程序将自行启动两次:作为应用程序和插件。 “grails.plugin.excludes”配置设置(在此处说明)可以防止这种情况的发生。

我已经在此jira问题中记录了此特殊用例:
http://jira.grails.org/browse/GRAILS-6751
“除了将Grails应用程序用作应用程序外,还允许将其用作Grails插件”

在许多情况下,这已成为我们的杀手feature。我们已经能够在其他用例中重用应用程序作为插件,并通过此功能将多个单独的应用程序组合到一个。当然,存在一些限制(例如名称冲突),但这对我们来说不是问题。

最常见的用例是重用整个应用程序,然后在另一个应用程序中覆盖 View 。由于现有应用程序可以同时是一个应用程序和一个插件,因此将“通用部分”提取到一个单独的插件中无需进行额外的工作。

要使现有的Grails应用程序成为插件,您只需将MyAppNameGrailsPlugin.groovy文件添加到根目录,并将此配置值添加到grails-app / conf / Config.groovy:
grails.plugin.excludes = ['myAppName'](驼峰大小写的应用程序名称,以小写字母开头)

邮件列表讨论:
http://grails.1312388.n4.nabble.com/Dynamic-applications-extending-an-existing-application-with-Grails-tp4634094p4634202.html

Burt的详细博客文章:
http://burtbeckwith.com/blog/?p=1973

大卫·道森(David Dawson)的演讲:
http://skillsmatter.com/podcast/home/large-scale-grails-using-plugins-how-to-modularise-an-application/jd-8012

关于grails - Grails:两个站点,一个代码库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19281212/

10-14 09:31
查看更多