我有一个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...
}
}
我做错了什么?我没有在发行说明中看到对此问题的任何讨论,因此它肯定不会成为所有依赖项更改的预期后果。
答案 0 :(得分:0)
这是一个已知的问题,有点像;通过Aether"看到"没有初始离线模式the upgrade guide中的部分。该指南仅提到带有grails的罐子,但所有罐子都受到影响,除非首先远程解决,否则罐子不会在本地解决。我想如果你有本地依赖,你应该从你自己的Maven安装中提供它们。
如果由于某种原因您不想管理自己的Maven回购,升级指南建议您改用Ivy。不要这样做。 Ivy在2.4.3中无法可靠地解决传递依赖关系。如果您无法维护自己的Maven仓库,请不要升级。