2012-04-16 58 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