Grails 病例差异上的常春藤分辨错误

Grails 病例差异上的常春藤分辨错误,grails,ivy,dependency-management,Grails,Ivy,Dependency Management,在我的Grails2.4.1配置中,我尝试创建一个链解析器。我正在链接两个商店-第三方和我的项目。链接的解析器名为“内部”。使用链分解器时,出现以下错误: 3rdpartyLib: bad revision found in http://<MY_REPO>/3rdpartycache/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.pom: expected='1.1.0.Final fo

在我的Grails2.4.1配置中,我尝试创建一个链解析器。我正在链接两个商店-第三方和我的项目。链接的解析器名为“内部”。使用链分解器时,出现以下错误:

3rdpartyLib: bad revision found in http://<MY_REPO>/3rdpartycache/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.pom: expected='1.1.0.Final found='1.1.0.FINAL'
我反复地寻找洞察力,读了很多书,但还没有找到答案。我挖掘了我的常春藤知识的深度,并与Grails进行了整合

我正在寻找有关如何使链解析器工作的建议,因为我们将需要为此项目和其他项目添加多个库

####编辑####

我更改了链解析器,以便在第三方之前添加myproject。如上所述,此操作失败

我更改了链解析器,使其仅包含第三方解析器。这也失败了。奇怪的是,在我看来,或者缺乏理解,因为在我看来,只有一个链解析器的链解析器应该可以替代给定的解析器


在我看来,使用链式解析器会导致解析失败是不合逻辑的。我们认为,当我们不使用链解析器时,解析是通过.m2缓存进行的,并且“something”(即使我指定了Ivy,maven是否实际被用于读取.m2缓存?)足够聪明,不需要考虑大小写。然而,当我们创建链分解器时,这是一个Ivy的东西,Ivy不处理大小写差异。纯粹是一种假设。

问题出在错误消息的末尾

3rdpartyLib:在中发现错误的修订 http:///3rdpartycache/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.pom: 预期值='1.1.0.Final'1.1.0.Final'


检查POM文件中的版本字段。版本字段区分大小写。看起来像是存储库问题。

您遇到的问题可能是由您用于jar(构建)的范围引起的。当Grails使用ivy解析其依赖的JAR时,它还检索它所拉取的所有JAR的可传递依赖项。可能发生的情况是,您有一个依赖于“运行时”的jar,它对验证api jar具有可传递的依赖关系。尝试将作用域更新为“运行时”,这将解决问题

也许我不清楚。这在不使用链分解器的情况下可以很好地解析,但在使用链分解器时将无法解析。不同之处在于链解析器版本链接了第三方解析器和myproject解析器。链接的解析器称为内部解析器。如果我将第三方替换为内部,它将解决问题。如果我改为使用internal(根据定义,它包括第三方),它将无法解析。因为这意味着只添加了myproject解析器,所以这个错误对我来说没有任何意义。请注意,突出的示例说明在第三方库中发现了错误的修订,但在未受约束的版本中它没有抱怨:|下载:validation-api-1.1.0.FINAL.pom.sha1 found javax.validation#validation-api;1.1.0.FINAL在第三方数据库中找到org.grails.plugins#tomcat;缓存中的7.0.54。。。正在下载http:///3rdpartycache/javax/validation/validation-api/1.1.0.FINAL/validation-api-1.1.0.FINAL.jar ... |下载:validation-api-1.1.0.FINAL.jar.sha1[SUCCESSFUL]javax.validation#validation-api;1.1.0.决赛!validation-api.jar(88ms)对此响应的否决投票只重新说明了问题。它没有考虑到应该没有区别,或者至少没有解释为什么只有在使用链式分解器时才会出现此错误。@BillTurner在作者有机会回答之前就否决答案不会鼓励其他人帮助你。祝你好运!我明白了。如果你修改答案,我将改变我的投票。显然,我无法更改它,除非它经过编辑。
::::::::::::::::::::::::::::::::::::::::::::::
::          UNRESOLVED DEPENDENCIES         ::
::::::::::::::::::::::::::::::::::::::::::::::
:: javax.validation#validation-api;1.1.0.Final: java.text.ParseException: inconsistent module descriptor file found in 'http://<MY_REPO>/3rdpartycache/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.pom': bad revision: expected='1.1.0.Final' found='1.1.0.FINAL'; 
::::::::::::::::::::::::::::::::::::::::::::::
|Downloading: validation-api-1.1.0.FINAL.pom.sha1
    found javax.validation#validation-api;1.1.0.FINAL in 3rdpartyLib
    found org.grails.plugins#tomcat;7.0.54 in cache
...
downloading http://<MY_REPO>/3rdpartycache/javax/validation/validation-api/1.1.0.FINAL/validation-api-1.1.0.FINAL.jar ...
|Downloading: validation-api-1.1.0.FINAL.jar.sha1
    [SUCCESSFUL ] javax.validation#validation-api;1.1.0.FINAL!validation-api.jar (88ms)
|Downloading: jandex-1.1.0.Final.pom.sha1
    found org.jboss#jandex;1.1.0.Final in 3rdpartyLib
    found javax.validation#validation-api;1.1.0.FINAL in cache
    [1.1.0.FINAL] javax.validation#validation-api;1.1.0.Final **(forced)**
def internalChainResolver()
{
    ChainResolver resolver = new ChainResolver()
    resolver.name = "internal"
    resolver.dual = true

    resolver.add thirdPartyLibrariesResolver()
    resolver.add myprojectLibraries()

    def ivySettings = new IvySettings()
    ivySettings.defaultInit()
    resolver.settings = ivySettings

    return resolver
}

def thirdPartyLibrariesResolver()
{
    IBiblioResolver resolver = new IBiblioResolver()
    resolver.name = "3rdpartyLib"

    resolver.root = "http://<MY_REPO>/3rdpartycache/"
    resolver.m2compatible = true

    def ivySettings = new IvySettings()
    ivySettings.defaultInit()
    resolver.settings = ivySettings

    return resolver
}

def myprojectLibraries()
{
    IBiblioResolver resolver = new IBiblioResolver()
    resolver.name = "myproject"

    resolver.root = "http://<MY_REPO>/myproject/"
    resolver.m2compatible = true

    def ivySettings = new IvySettings()
    ivySettings.defaultInit()
    resolver.settings = ivySettings

    return resolver
}
grails.project.dependency.resolver = "ivy" // or  maven
grails.project.dependency.resolution = {

    inherits("global") {
        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
    }
    log 'info' // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve
    legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility
    repositories {
        inherits true // Whether to inherit repository definitions from plugins

        resolver internalChainResolver()
        //        resolver thirdPartyLibrariesResolver()
        grailsHome()
        grailsCentral()

    }

    dependencies {
         test "org.grails:grails-datastore-test-support:1.0-grails-2.4"
        build 'javax.validation:validation-api:1.1.0.FINAL'
        runtime 'org.springframework:spring-expression:4.0.5.RELEASE'
        runtime 'org.springframework:spring-aop:4.0.5.RELEASE'
        runtime 'org.grails:grails-datastore-gorm-hibernate-core:3.1.1.RELEASE'
        runtime 'org.javassist:javassist:3.18.1-GA'
        runtime 'com.fasterxml:classmate:1.0.0'

    }

    plugins {
        // plugins for the build system only
        build ":tomcat:7.0.54"
        // plugins for the compile step
        compile ":scaffolding:2.1.1"
        compile ':cache:1.1.6'
        compile ":asset-pipeline:1.8.11"

        // plugins needed at runtime but not for compilation
        runtime ":hibernate4:4.3.5.4" // or ":hibernate:3.6.10.16"
        runtime ":database-migration:1.4.0"
        runtime ":jquery:1.11.1"

    }
}