如何永久删除默认的Grails Web应用程序文件?

时间:2012-07-14 04:29:49

标签: grails grails-2.0

当我创建Grails应用程序时,它会在web-app目录中附带一些默认文件:

$ find web-app
web-app
web-app/css
web-app/css/errors.css
web-app/css/main.css
web-app/css/mobile.css
web-app/images
web-app/images/apple-touch-icon-retina.png
web-app/images/apple-touch-icon.png
web-app/images/favicon.ico
web-app/images/grails_logo.jpg
web-app/images/grails_logo.png
web-app/images/leftnav_btm.png
web-app/images/leftnav_midstretch.png
web-app/images/leftnav_top.png
web-app/images/skin
web-app/images/skin/database_add.png
web-app/images/skin/database_delete.png
web-app/images/skin/database_edit.png
web-app/images/skin/database_save.png
web-app/images/skin/database_table.png
web-app/images/skin/exclamation.png
web-app/images/skin/house.png
web-app/images/skin/information.png
web-app/images/skin/shadow.jpg
web-app/images/skin/sorted_asc.gif
web-app/images/skin/sorted_desc.gif
web-app/images/spinner.gif
web-app/images/springsource.png
web-app/js
web-app/js/application.js

(从输出中剪切META-INFWEB-INF个文件夹)

这些文件在我的应用中创建了混乱,并且还使用了我可能想要用于我自己的资源的公共目录名cssimagesjs

过去我手动删除了这些内容,但在运行grails upgrade后会自行返回,并在此过程中覆盖我自己的文件。

我看不出有任何理由保留这些文件。有什么我想念的吗?如果没有,我怎么能摆脱它们并确保它们永远不会回来?

2 个答案:

答案 0 :(得分:9)

根据Burt Beckwith,正确的解决方法是不使用grails upgrade。显然,这不再是升级Grails应用程序的推荐方法,因为它实际上只做了两件重要的事情,那就是碰撞版本然后清理应用程序以便重新下载所有内容。

次要升级

从该帖子中,推荐的较小版本更改流程为:

  
      
  1. 修改application.properties并更新版本。
  2.   
  3. 然后运行grails clean以清除过期的文件。
  4.   
  5. 最后运行grails compile,它会询问您是否要升级Hibernate和Tomcat插件(如果它们列在BuildConfig.groovy中)。
  6.         

    您也可以手动删除$HOME/.grails文件夹下工作文件夹中的旧插件。

Burt提供的另一个提示是:

  

如果您将grails.project.work.dir = 'target'添加到BuildConfig.groovy,情况会更简单。然后你的所有插件都将在那里,你可以删除整个目标文件夹,所有的插件将被重新安装和/或更新,所有的类将被重新编译。

主要升级

重大更新的过程(例如将1.x应用程序升级到2.x应用程序)更为复杂:

  
      
  • 在新版Grails中创建一个新的空应用
  •   
  • 在旧版Grails中创建一个新的空应用
  •   
  • 使用空的旧版应用程序来区分您当前的应用程序 - 这将告诉您删除,添加和更改的内容。复制新文件,删除应删除的内容,然后重新执行所做的更改。请务必阅读中级Grails版本的发行说明和升级信息,以便了解如何进行新的更改 - 例如HSQLDB - > DataSource.groovy等中的H2。不要盲目地做出同样的改变。
  •   

希望最终会在官方文档中记录这一点,因为它有意义,因为升级过程太复杂而无法实现自动化。


新申请

但是,这并不能解释如何处理新的应用程序。当然,你可以简单地删除所有Grails特定的文件(我建议除非你使用脚手架)。

另一种选择是将所有Grails特定的文件移动到某个子目录中,然后手动修改(和/或重命名)main布局,CSS文件和资源链接以指向这些新位置。

如果您仍想使用脚手架,我建议将main.gsp布局复制到scaffolding.gsp,并创建一个新的资源模块,仅用于包含所有默认CSS和JS要求的脚手架。然后运行grails install-templates,它将为您提供脚手架的基本视图模板。然后,您可以轻松更改布局并添加或更新正确的资源模块。

最后,一旦你以你想要的方式获得基础应用程序,请将其压缩并保存以供日后使用。这至少是一个只需要做一次这一切的简单方法。

  

注意
  安装模板后,您可能不需要位于artifacts下的warsrc/templates模板文件夹。除非你知道你使用它们,否则它们应该被删除。


最后请注意,请确保使用良好,强大的版本控制系统,例如git或mercurial。如果您不小心运行grails upgrade,并且丢弃或回滚您不想更改的文件,这将使您可以轻松查看已修改的内容。使用体面的IDE或GUI,您通常只需点击几下即可解决此问题。

答案 1 :(得分:1)

在grails项目的目录脚本下,您需要创建_Events.groovy

升级脚本会触发2个事件,因此您可以复制现有文件,让脚本执行操作并最后替换文件。

所以它会给出类似的东西

eventStatusUpdate = { msg ->
    def listenMsg = "Please make sure you view the README for important information about changes to your source code."
    if(msg == listenMsg) {
        copy(todir: "<the dir you want to put your stuff>") {
            fileset(dir: "${basedir}/web-app") {
                include(name: "**/**")
                exclude(name: "WEB-INF/**")
                present(present: "srconly", targetdir: "${basedir}/web-app")
            }
        }
    }  
}

eventStatusFinal = { msg ->
    if(msg == "Project upgraded") {
        copy(todir: "${basedir}/web-app") {
            fileset(dir: "<the dir with your stuff...>") {
                include(name: "**/**")
                exclude(name: "WEB-INF/**")
                present(present: "srconly", targetdir: "${basedir}/web-app")
            }
        }
    }    
}