Grails很难解决某些依赖关系

时间:2011-11-02 04:15:13

标签: grails plugins dependencies

我的“解决依赖关系”大约需要30秒,以便快速启动计算机和网络。

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

SimpleDB的:

    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'

    }
}

2 个答案:

答案 0 :(得分:5)

我找到了罪魁祸首。 如果您使用的插件依赖于maven中具有“开放式”依赖关系的库,那么grails将会查找每个时间,如果有更新的版本要在该范围内下载。我不知道为什么有人会像这样指定它。这似乎会导致不可靠的行为。对我来说,罪魁祸首是亚马逊的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秒减少到<1秒

答案 1 :(得分:2)

如果运行grails --offline run-app,则依赖性解析(至少部分)被禁用,启动时间会快得多。

当然你必须确保你不需要下载任何新的依赖项 - 我已经花时间寻找解决问题的解决方案,结果是因为我正在离线运行grails。我尽快学到了:)

我同意Grails的启动时间非常慢,幸运的是框架的其余部分提高了工作效率 - 大多数情况下,你比普通的旧java更有效率: - )