如何在<project-dir> / lib?</project-dir>中获取grails 2.4.3来解决依赖关系

时间:2014-09-23 14:49:50

标签: maven grails

我有一个Grails 2.2.4项目,我将升级到Grails 2.4.3。我认为,除了我们当地的罐子都没有解决之外,我主要通过了依赖性变化。

具体来说,我们的项目依赖于lib目录中的几个jar - 例如newrelic-api-2.18.0.jar。每当我尝试编译项目时,都会收到此错误:

| Error Resolve error obtaining dependencies: The following artifacts could not be resolved:  newrelic:newrelic-api:jar:2.18.0  in grailsCentral (http://repo.grails.org/grails/plugins) (Use --stacktrace to see the full trace)

......就其而言,这是完全公平的:那个jar真的不是grailsCentral,而是my-project/lib。那么如何让Grails在那里寻找呢?

我们所有的本地依赖都无法以这种方式解决。我们所有的远程依赖项都能正确解析(至少,一旦我对Hibernate版本进行了一些小改动,它们就会这样做)。我可以通过注释掉所有本地依赖项来获得依赖项解析成功,但当然编译会稍后会出现一堆NoClassDefFoundError s。

当我切换回2.2.4时,一切都很好:依赖关系正确解决,应用程序加载没有问题。

这是我的buildConfig的负责人:

grails.servlet.version = "2.5"
grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.target.level = 1.6
grails.project.source.level = 1.6

grails.project.dependency.resolver = "maven"

grails.project.dependency.resolution = {
    cacheDir "target/ivy-cache"
    inherits("global") { }
    log "warn"
    checksums true
    legacyResolve true // whether to do a secondary resolve on plugin installation, not advised and here only for backwards compatibility

    repositories {
        inherits true

        grailsPlugins()
        grailsHome()
        grailsCentral()
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        runtime 'newrelic:newrelic-api:2.18.0'
        // ...various other deps, plugins, and whatnot...
    }
}

我做错了什么?我没有在发行说明中看到对此问题的任何讨论,因此它肯定不会成为所有依赖项更改的预期后果。

1 个答案:

答案 0 :(得分:0)

这是一个已知的问题,有点像;通过Aether&#34;看到&#34;没有初始离线模式the upgrade guide中的部分。该指南仅提到带有grails的罐子,但所有罐子都受到影响,除非首先远程解决,否则罐子不会在本地解决。我想如果你有本地依赖,你应该从你自己的Maven安装中提供它们。

如果由于某种原因您不想管理自己的Maven回购,升级指南建议您改用Ivy​​。不要这样做。 Ivy在2.4.3中无法可靠地解决传递依赖关系。如果您无法维护自己的Maven仓库,请不要升级。