我正在使用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