我正在使用Grails 2.4.2应用程序,并且相同的代码库用于各种客户。每个客户都可以获得基于GSP的Web UI,并使用自己的图标,文本字符串等进行自定义。我已确定使用Config.groovy中定义的Groovy变量在GSP页面中完成了自定义设置。即像这样:编译的GSP页面是否与上下文路径绑定?
customerName = ''
favicon = ''
if (appName == 'foo') {
customerName = 'Foo'
favicon = "favicon_${appName}.ico"
}
这些变量然后从GSP页面中引用。这工作正常。问题是应用程序需要为每个客户提供一个单独的war文件。因此,CI服务器为客户A构建一场战争,然后运行grails clean,修改application.properties文件中的应用程序名称等,为客户B构建战争等。每个战争文件构建需要大约4.5米,乘以10个客户建立。所以我认为更好的方法是构建war文件一次,然后让CI服务器将其复制N次,并在每个war文件中修改application.properties文件,其中包含客户名称,servlet上下文路径等。有人向我指出,GSP页面在war文件构建期间被编译,并且它们以上下文路径作为类名称的一部分。这对我来说似乎有点奇怪。即假设我有Customer“Foo”,并且我决定构建一个名为foo.war的war文件,该文件将部署在servlet上下文路径/ foo中。在编译结果的页面“bar.gsp”将是这样的:
WEB-INF/classes/gsp_foo_bar.class
WEB-INF/classes/gsp_foo_bar_gsp_html.data
WEB-INF/classes/gsp_foo_bar_gsp_linenumbers.data
我正在为一个客户的已编译war文件,更改应用程序名称和上下文,和重新部署它作为试验顾客B.它工作正常,并且我看到顾客B的图标等等。因此,我想问题的总结归结为零件是否将页面连接到上下文路径/ foo,或者它是简单的化妆品?我当然不希望在运行时懒惰编译或重新编译的性能受到影响。而且由于这种情况下GSP页面的内容基本上是静态的,并且不会改变,所以它似乎不必与上下文或应用程序名称绑定。有没有人知道它是否只是一个命名的东西,或者如果我更改应用程序名称/上下文时不会重新编译战争而遇到问题?也许有更好的方法来完成我想要的东西?谢谢。
您GSPS的内部类的名字只是一个方式给它们命名。你真正的问题是什么?您可以在同一台服务器上使用不同的上下文路径名称部署相同的war,而不会有任何问题。你有没有尝试过? – albertovilches
谢谢albertovilches。是的,我已经尝试过,但不确定它是否存在缺点,比如应用程序无法使用编译页面或类似的东西。很高兴听到情况并非如此。 – user2337270