2012-04-16 67 views
1

我們在我們的grails應用程序中使用各種插件(如日誌記錄,彈簧安全核心,ui,acl和許多其他插件)。現在這些插件帶有默認的gsps(在每個插件的視圖文件夾中)。構建戰爭時刪除插件視圖(gsp)

我想構建一個WAR而不包括任何插件的視圖。因此,當戰爭現在建立時,它會創建包含views文件夾的插件文件夾,這些文件夾默認會與插件一起提供,這些視圖引入了很多漏洞,所以我想排除插件視圖。

我現在想這一權利BuildConfig.groovy象下面這樣:

grails.project.dependency.resolution = { 
grails.war.resources = { stagingDir -> 
    println "Customized delete started..." 
    delete{fileset dir: "${stagingDir}/WEB-INF/plugins/logging-0.1/grails-app/views/"} 
    delete{fileset dir: "${stagingDir}/WEB-INF/plugins/spring-security-ui-0.1.2/grails-app/views/"} 
    } 
    } 

但問題是代碼試圖刪除的意見時,他們還沒有因戰爭而建設過程中產生的。因此,我得到一個文件沒有找到這些插件視圖的錯誤。

我應該在哪裏編寫代碼來刪除插件視圖,以便它們在構建WAR時已經創建並可以刪除,或者如何在WAR中包含插件視圖?

在此先感謝.. Priyank

回答

2

我回答Grails的郵件列表上的這個問題。 http://grails.1312388.n4.nabble.com/deleting-plugins-views-gsp-when-building-the-war-td4560517.html (答案尚未露面的nabble)

您可以刪除/從/在腳本/ _Events.groovy文件中指定的eventCreateWarStart 事件添加文件到WAR文件。

這可能會實現:

文件名:腳本/ _Events.groovy

eventCreateWarStart = { warName, stagingDir -> 
    Ant.delete(dir: "${stagingDir}/WEB-INF/plugins/logging-0.1/grails-app/views") 
    Ant.delete(dir: "${stagingDir}/WEB-INF/classes", includes:"gsp_logging*.*") 
    Ant.delete(dir: "${stagingDir}/WEB-INF/plugins/spring-security-ui-0.1.2/grails-app/views") 
    Ant.delete(dir: "${stagingDir}/WEB-INF/classes", includes:"gsp_springSecurityUi*.*") 
} 

我不知道你是否還可以刪除插件控制器類沒有問題。我們使用Filter類來「禁用」由插件提供的控制器。

作爲一個側面說明,您可以在生產環境中使用無證尚「grails.plugins.excludes」禁用「的發展,僅」插件功能:

例子:在Config.groovy中 :

import grails.util.Environment 

if(Environment.current == Environment.PRODUCTION) { 
    grails.plugin.excludes = ['somePluginName'] 
} 
+0

嗨再次感謝您的解答..我們成功地使用了您的方法,我們在_Events.groovy中編寫了一個eventCreateWarEnd事件並指定了要刪除的文件,但我們並未使用eventCreateWarStart,因爲我們希望插件文件夾及其所有內容在調用delete時存在,因此在末尾調用delete。感謝你的回答。 – 2012-04-16 07:30:56

+1

「includes」已棄用:http://ant.apache.org/manual/Tasks/delete.html。你應該使用文件集: ant.delete fileset(dir:「$ {stagingDir}/WEB-INF/classes」,包括:「gsp_springSecurityUi *。*」) } – Mark 2013-03-25 14:48:04