Grails:部署时间非常慢。“解决依赖关系...”需要 10 多秒

Chr*_*ris 5 performance grails dependencies

每次我对 Grails 应用程序进行微小更改时,部署它都需要 10-15 秒。大部分时间都在“解决依赖关系”......

Welcome to Grails 1.3.7 - http://grails.org/
...
Resolving dependencies...
Dependencies resolved in 9868ms.
Run Code Online (Sandbox Code Playgroud)

以下是我的设置的一些详细信息:

  • MacBook (OS X 10.5.8) 2.4Ghz Core 2 Duo,配备 4GB RAM + 充足的磁盘空间
  • SpringSource 工具套件 - 版本:2.6.1.RELEASE 内部版本号:201105041000
  • 圣杯 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 目录位于我的本地计算机上,所以这不是这个问题
  • 我确实遇到了一些与这些类似的依赖性问题,但是我现在已经修复了它们并且没有收到任何错误。
  • 我通过在 grails.project.dependency.resolution 部分中设置日志“info”来打开 BuildConfig.groovy 中的日志记录。它似乎花费了大部分时间“解决”依赖关系,而不是实际下载项目,所以我认为 mavenCentral 或其他公共 Maven 存储库不是问题。

从日志中提取...

resolution report  resolve 802ms  artifacts dl 86ms
resolution report resolve 8492ms  artifacts dl 150ms
Dependencies resolved in 9909ms.
Run Code Online (Sandbox Code Playgroud)

额外信息: 我所说的部署是指使用“run-app”,所谓重新部署是指更改强制 Grails 自动执行“run-app”的文件。我没有任何其他与网络相关的性能问题,并且拥有 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。

额外信息 2:完整的常春藤日志附在此处


我每次只更改很少的文件,因此当需要 15 秒进行重新部署时,我感到非常沮丧。

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

Ben*_*err 4

在评论中跟进我们的对话。

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

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