1

我们在 grails 应用程序中使用了各种插件(如日志记录、spring security core、ui、acl 和许多其他插件)。现在这些插件带有默认 gsps(在每个插件的 views 文件夹中)。

我想构建一个不包含任何插件视图的 WAR。因此,当现在构建战争时,它会创建插件文件夹,其中包含插件默认附带的视图文件夹,这些视图引入了很多漏洞,所以我想排除插件视图。

我现在正在 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

4

1 回答 1

2

我在 Grails 邮件列表中回答了这个问题。 http://grails.1312388.n4.nabble.com/deleting-plugins-views-gsp-when-building-the-war-td4560517.html (答案还没有出现在nabble中)

您可以在 scripts/_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*.*")
}

我不确定您是否也可以毫无问题地删除插件控制器类。我们使用过滤器类来“禁用”插件提供的控制器。

作为旁注,您可以使用尚未记录的“grails.plugins.excludes”功能在生产环境中禁用“仅开发”插件:

示例:在 Config.groovy 中:

import grails.util.Environment

if(Environment.current == Environment.PRODUCTION) {
    grails.plugin.excludes = ['somePluginName']
}
于 2012-04-16T07:03:10.273 回答