【问题标题】:Grails: Very slow deploy time. 'Resolving Dependencies...' takes 10+ secondsGrails:部署时间非常慢。 'Resolving Dependencies...' 需要 10 多秒
【发布时间】:2011-09-10 10:40:46
【问题描述】:

每次我对 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 RAM + 充足的磁盘空间
  • SpringSource 工具套件 - 版本:2.6.1.RELEASE 构建 ID:201105041000
  • Grails 1.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 目录在我的本地机器上,所以它不是 this problem
  • 我确实遇到了一些类似于 these 的依赖问题,但是我现在已经修复了它们,并且没有收到任何错误。
  • 我通过在 grails.project.dependency.resolution 部分设置日志“信息”在 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 秒。该设置是 Grails 1.3.6,Shiro 安全插件,一个类似的小型项目,在 Windows XP Service Pack 3 机器上具有几个域模型(Intel Core 2 Duo 2.2Ghz,2GB RAM)然后我使用的是 NetBeans 6.9.1。

Extra Info 2:完整的常春藤日志附在here


我每次只更改很少的文件,因此重新部署需要 15 秒,这非常令人沮丧。

有人对如何减少“解决依赖关系...”所需的时间有任何建议吗?

【问题讨论】:

  • 您是否在 Grails 之外遇到任何其他与网络相关的问题(缓慢)?您如何衡量 15 秒太长的事实?相比什么?此外,您可能会澄清“重新部署”的含义。当我想到部署时,我想到了将 WAR 文件放入 servlet 容器中。我相信您可能只是指用 run-app “重新启动”应用程序?
  • @Gregg,我已将额外信息直接添加到问题中。
  • @Chris 是否有任何快照依赖项?当您在 BuildConfig.groovy 中调高 ivy 日志记录级别时,您会看到什么?例如,我 99% 肯定 webtest 插件依赖于快照依赖项。
  • @Tiggerizzy,完整的常春藤日志附在here 中,是的,htmlunit 和 webtests 插件文件名以 -SNAPSHOT 结尾
  • @Tiggerizzy,某些依赖项是“快照”这一事实是否会导致额外的延迟?解决此问题的最简单方法是什么?

标签: performance grails dependencies


【解决方案1】:

跟进我们在 cmets 中的对话。

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

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

【讨论】:

  • 谢谢。这已经有了很大的进步!但是,我仍然想使用该插件。如果其他人知道强制 Grails 不进行外部检查的方法,请在这里告诉我!
  • 有没有方便的方法来检查你的插件是否使用了快照依赖项?
【解决方案2】:

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

Grails: working offline with snapshot dependencies

【讨论】:

    【解决方案3】:

    请在此处查看我的答案。依赖于定义不明确的 maven 工件的插件可能会导致 grails 每次都去寻找更新的版本。

    Grails very slow to resolve certain dependencies

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 2017-04-09
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 2021-07-20
      • 2021-04-15
      • 1970-01-01
      • 2012-07-04
      相关资源
      最近更新 更多