【问题标题】:Grails very slow to resolve certain dependenciesGrails 解决某些依赖项的速度非常慢
【发布时间】:2011-11-02 04:15:12
【问题描述】:

对于一台闪电般快速的计算机和网络,我的“解决依赖关系”大约需要 30 秒。

我看过这个问题Grails: Very slow deploy time. 'Resolving Dependencies...' takes 10+ seconds,我似乎没有任何“快照”依赖项。我已经清除了我的常春藤缓存并强制重新下载所有内容,没有帮助。启用日志记录,这几行是违规者。没有下载任何内容,但鉴于我的网络流量,似乎每次都尝试远程查找某些内容。请注意,这些是唯一在它们之前有 [some number] 版本的条目,然后是另一个不同的条目 - 这不可能是巧合 - 这是什么意思?如何阻止 grails 尝试找到这些略有不同的版本?

    .... these lines take 20+seconds, everything else is in the milliseconds ...
found commons-logging#commons-logging;1.1.1 in grailsPlugins
[1.1.1] commons-logging#commons-logging;[1.1, 2.0)
found org.apache.httpcomponents#httpclient;4.1.2 in default
[4.1.2] org.apache.httpcomponents#httpclient;[4.1, 5.0)
found org.apache.httpcomponents#httpcore;4.1.2 in default
found org.codehaus.jackson#jackson-core-asl;1.9.1 in default
[1.9.1] org.codehaus.jackson#jackson-core-asl;[1.4,)
found javax.mail#mail;1.4.4 in default
[1.4.4] javax.mail#mail;[1.4,)

我正在使用两个插件,它们肯定是违规者,并在下面列出了它们的 dependencies.groovy。我试过注释掉任何显式的远程 URL。

简单数据库:

    grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"

grails.project.dependency.resolution = {

    inherits "global"

    log "warn"

    String datastoreVersion = "1.0.0.M9"

    repositories {
        grailsPlugins()
        grailsHome()
        grailsCentral()
        mavenRepo "http://repo.grails.org/grails/core" //tried commenting this out, no help
        mavenLocal()
        mavenCentral()
        mavenRepo 'http://repository.codehaus.org'  //tried commenting this out, no help

}

dependencies {

    def excludes = {
        transitive = false
    }
    compile("org.grails:grails-datastore-gorm-simpledb:$datastoreVersion",
             "org.grails:grails-datastore-gorm-plugin-support:$datastoreVersion",
             "org.grails:grails-datastore-gorm:$datastoreVersion",
             "org.grails:grails-datastore-core:$datastoreVersion",
             "org.grails:grails-datastore-simpledb:$datastoreVersion",
             "org.grails:grails-datastore-web:$datastoreVersion") {
         transitive = false
     }        

    runtime("stax:stax:1.2.0", excludes)
    runtime('com.amazonaws:aws-java-sdk:1.2.0')

    test("org.grails:grails-datastore-gorm-test:$datastoreVersion",
         "org.grails:grails-datastore-simple:$datastoreVersion") {
        transitive = false
    }
}

plugins {
    build ":release:1.0.0.RC3", {
        exported = false
    }
}

}

Ajax 上传器:

 grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.release.scm.enabled=false

grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {
        // uncomment to disable ehcache
        // excludes 'ehcache'
    }
    log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    repositories {
        grailsPlugins()
        grailsHome()
        grailsCentral()

        // uncomment the below to enable remote dependency resolution
        // from public Maven repositories
        mavenLocal()
        mavenCentral()
        //mavenRepo "http://snapshots.repository.codehaus.org"
        //mavenRepo "http://repository.codehaus.org"
        //mavenRepo "http://download.java.net/maven/2/"
        //mavenRepo "http://repository.jboss.com/maven2/"
    }
    dependencies {
        // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.

        test 'org.gmock:gmock:0.8.1'
    }
    plugins {

        //build ':release:1.0.0.RC3'

    }
}

【问题讨论】:

    标签: grails plugins dependencies


    【解决方案1】:

    我找到了罪魁祸首。如果该范围内有更新的版本要下载,则时间。我不知道为什么有人会这样指定它。似乎它会导致不可靠的行为。对我来说,罪魁祸首是亚马逊的 java aws 库,它自然是与亚马逊云对话的 simpledb 插件所需要的。

    http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.2.10

    注意它的一些依赖是这样的

    org.apache.httpcomponents httpclient [4.1, 5.0)

    似乎每次 grails 都在寻找更新的版本(如果存在就下载,我只是注意到这次运行时 httpclient 的 4.2-alpha1 下降了)。

    通过从插件中删除该依赖项并将所需的库手动添加到我的 .lib 文件夹中,我将启动时间从 >30 秒减少到

    【讨论】:

    • 如果你的grails启动时间
    • 我几乎可以保证你仍然有依赖项试图通过网络调用来解决,就像我上面提到的那样。我的规格相似(较新的 macbook pro、8gigs ram、SSD)
    • 可能是这种情况,但尽管如此,我还是很难相信您的启动时间小于 1 秒,这太荒谬了。在带有 vanilla create-app'd 应用程序的 2.0 RC1 上,#grails 后跟 grails> run-app 的启动时间为 @10 秒,并且 BuildConfig 的存储库 {...} 块被注释掉
    • 您能否澄清一下您究竟做了什么来实现如此快速的启动时间?迄今为止,我对 Grails 最大的抱怨是启动时间很慢(因为尽管改进了重新加载代理,但您不可避免地必须在域类更改、src/groovy 更改等时重新启动)
    • virtualeyes - 你能澄清一下'exit而不是ctrl-c'的意思吗?这对我来说没有任何意义。 ://
    【解决方案2】:

    如果您运行grails --offline run-app,则依赖解析(至少部分)被禁用并且启动时间更快。

    当然,您必须确保不需要下载任何新的依赖项——我已经花时间四处寻找解决问题的方法,结果证明是因为我离线运行 grails。不过我学得很快:)

    我同意 Grails 的启动时间非常慢,幸运的是框架的其余部分提高了生产力 - 主要是你比普通的旧 java 更有效率:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2015-11-04
      相关资源
      最近更新 更多