当我创建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-INF
和WEB-INF
个文件夹)
这些文件在我的应用中创建了混乱,并且还使用了我可能想要用于我自己的资源的公共目录名css
,images
和js
过去我手动删除了这些内容,但在运行grails upgrade
后会自行返回,并在此过程中覆盖我自己的文件。
我看不出有任何理由保留这些文件。有什么我想念的吗?如果没有,我怎么能摆脱它们并确保它们永远不会回来?
答案 0 :(得分:9)
根据Burt Beckwith,正确的解决方法是不使用grails upgrade
。显然,这不再是升级Grails应用程序的推荐方法,因为它实际上只做了两件重要的事情,那就是碰撞版本然后清理应用程序以便重新下载所有内容。
从该帖子中,推荐的较小版本更改流程为:
- 修改
application.properties
并更新版本。- 然后运行
grails clean
以清除过期的文件。- 最后运行
醇>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
,它将为您提供脚手架的基本视图模板。然后,您可以轻松更改布局并添加或更新正确的资源模块。
最后,一旦你以你想要的方式获得基础应用程序,请将其压缩并保存以供日后使用。这至少是一个只需要做一次这一切的简单方法。
注意强>
安装模板后,您可能不需要位于artifacts
下的war
或src/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")
}
}
}
}