【问题标题】:How do I permanently get rid of the default Grails web-app files?如何永久删除默认的 Grails web-app 文件?
【发布时间】:2012-07-13 22:15:58
【问题描述】:

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

$ 查找网络应用程序
网络应用
网络应用程序/CSS
网络应用程序/css/errors.css
网络应用程序/css/main.css
网络应用程序/css/mobile.css
网络应用程序/图像
网络应用程序/图像/apple-touch-icon-retina.png
网络应用程序/图像/apple-touch-icon.png
网络应用程序/图像/favicon.ico
网络应用程序/图像/grails_logo.jpg
网络应用程序/图像/grails_logo.png
网络应用程序/图像/leftnav_btm.png
网络应用程序/图像/leftnav_midstretch.png
网络应用程序/图像/leftnav_top.png
网络应用程序/图像/皮肤
网络应用程序/图像/皮肤/database_add.png
网络应用程序/图像/皮肤/database_delete.png
网络应用程序/图像/皮肤/database_edit.png
网络应用程序/图像/皮肤/database_save.png
网络应用程序/图像/皮肤/database_table.png
网络应用程序/图像/皮肤/exclamation.png
网络应用程序/图像/皮肤/house.png
网络应用程序/图像/皮肤/信息.png
网络应用程序/图像/皮肤/shadow.jpg
网络应用程序/图像/皮肤/sorted_asc.gif
网络应用程序/图像/皮肤/sorted_desc.gif
网络应用程序/图像/spinner.gif
网络应用程序/图像/springsource.png
网络应用程序/js
web-app/js/application.js

(从输出中截取的META-INF 和WEB-INF 文件夹)

这些文件在我的应用程序中造成混乱,并且还使用常见的目录名称 css、images 和 js,我可能想将它们用于我自己的资源。

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

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

【问题讨论】:

  • 您可以使用 tis 事件破解 grails 以防止它这样做,但是您多久升级一次应用程序?你不能用你的版本控制来恢复 web-app/* 中改变的静态资源吗?
  • @Raphael,这就是我过去所做的。我只是想一定有我遗漏的东西,因为这一定是一个普遍的问题。

标签: grails grails-2.0


【解决方案1】:

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

小幅升级

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

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

您也可以手动删除$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,它将为您提供用于脚手架的基本视图模板。然后,您可以轻松更改布局并添加或更新正确的资源模块。

最后,一旦您以您想要的方式获得了基本应用程序,请将其压缩并保存以备后用。这至少是一种简单的方法,只需执行一次所有这些操作。

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


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

【讨论】:

    【解决方案2】:

    在 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")
                }
            }
        }    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 2019-06-23
      • 2013-05-09
      • 2020-11-10
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多