Performance Grails:部署时间非常慢';解决依赖关系…';取10+;秒

Performance Grails:部署时间非常慢';解决依赖关系…';取10+;秒,performance,grails,dependencies,Performance,Grails,Dependencies,每次我对我的Grails应用程序做一个小改动,部署它都需要10-15秒。大部分时间用于“解决依赖项” Welcome to Grails 1.3.7 - http://grails.org/ ... Resolving dependencies... Dependencies resolved in 9868ms. 以下是我的设置的一些详细信息: MacBook(OS X 10.5.8)2.4Ghz Core 2 Duo,4GB内存+大量磁盘空间 SpringSource工具套件-版本:2.

每次我对我的Grails应用程序做一个小改动,部署它都需要10-15秒。大部分时间用于“解决依赖项”

Welcome to Grails 1.3.7 - http://grails.org/
...
Resolving dependencies...
Dependencies resolved in 9868ms.
以下是我的设置的一些详细信息:

  • MacBook(OS X 10.5.8)2.4Ghz Core 2 Duo,4GB内存+大量磁盘空间
  • SpringSource工具套件-版本:2.6.1.发布版本Id:201105041000
  • Grails1.3.7
  • 只有几个域模型的小型Grails项目
  • 只有几个插件:hibernate 1.3.7、mail 1.0、spring security core 1.1.3、spring security open id 1.0.2、spring security ui 0.1.2、webtest 3.0.1
已调查的领域:

  • 删除.ivy2目录并强制进行完整的外部刷新确实使其下降了约5秒
  • 我的.ivy2目录在本地计算机上,因此它不是
  • 我确实有一些类似的依赖性问题,但是我现在已经修复了它们,并且没有出现任何错误
  • 通过在grails.project.dependency.resolution部分中设置log“info”,我在BuildConfig.groovy中打开了日志记录。它似乎花费了大部分时间“解析”依赖项,而不是实际下载项目,因此我认为mavenCentral或其他公共Maven存储库不是问题
从日志中提取

resolution report  resolve 802ms  artifacts dl 86ms
resolution report resolve 8492ms  artifacts dl 150ms
Dependencies resolved in 9909ms.

额外信息: 所谓部署,我指的是使用“运行应用程序”,所谓重新部署,我指的是更改一个文件,迫使Grails自动执行“运行应用程序”。我没有任何其他与网络相关的性能问题,并且有32MB的下行、1MB的上行宽带互联网连接

为了进行基准测试,我曾经在一个类似大小的应用程序上工作过,其中“解决依赖项”大约需要1秒。这个设置是Grails1.3.6,Shiro安全插件,一个类似的小项目,在WindowsXP service Pack 3机器上有几个域模型(Intel Core 2 Duo 2.2Ghz,2GB RAM),然后我使用的是NetBeans 6.9.1

额外信息2:附上完整的常春藤日志


我每次只更改很少的文件,所以当重新部署需要15秒时,这是非常令人沮丧的


有人对如何减少“解决依赖项…”所需的时间有什么建议吗?在评论中跟进我们的对话

如果确定问题不在于网络,我所知道的减少依赖项解析时间的最佳方法是确保没有任何快照依赖项。快照依赖项是活动开发中依赖项的版本,因此Ivy实际上需要到外部服务器上检查该快照的新版本是否可用


我注意到您提到您正在使用webtest 3.0.1 gr ails插件。我知道这个插件依赖于两个快照jar。因此,删除此插件应该可以缩短依赖项解析所需的时间。我不知道有什么方法可以覆盖插件中指定的依赖项。在webtest插件的情况下,我认为除了指定的版本之外,没有其他版本的依赖关系是可以接受的。你能做的最好的事情就是唠叨插件作者删除快照。

请看我的答案。依赖定义不好的maven工件的插件会导致grails每次都去寻找新版本

刚刚发现(通过询问)您可以使用本地存储库来解决快照依赖关系。这可能比通过网络更快:


您是否遇到Grails之外的任何其他网络相关问题(缓慢)?你如何衡量15秒太长这一事实?和什么相比?此外,您还可以澄清“重新部署”的含义。当我想到部署时,我想到将WAR文件放到servlet容器中。我相信你可能只是想用run app“重新启动”应用程序?@Gregg,我已经直接在问题中添加了额外的信息。@Chris是否存在快照依赖关系?在BuildConfig.groovy中打开常春藤日志记录级别时,您看到了什么?例如,我99%肯定webtest插件依赖于快照依赖关系。@Tiggerizzy,完整的常春藤日志已附加,htmlunit和webtests插件文件名以结尾-SNAPSHOT@Tiggerizzy,某些依赖项是“快照”这一事实是否会导致额外的延迟?最简单的方法是什么?谢谢。这是一个很大的进步!但是,我仍然想使用这个插件。如果其他人知道强制Grails不进行外部检查的方法,请在这里告诉我!!是否有一种方便的方法来检查您的插件是否使用了快照依赖项?