Gradle groovy 和 RestAssured groovy 之间的版本冲突

Posted

技术标签:

【中文标题】Gradle groovy 和 RestAssured groovy 之间的版本冲突【英文标题】:Conflicting versions between Gradle groovy and RestAssured groovy 【发布时间】:2022-01-03 22:59:20 【问题描述】:

我正在尝试运行使用 RestAssured useRelaxedHTTPSValidation() 方法的自动化测试,但执行失败并出现以下错误消息。

我正在使用 gradle 进行构建,这是我正在尝试恢复的旧项目。

Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-xml is loaded in version 2.5.8 and you are trying to load version 3.0.8
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl$DefaultModuleListener.onModule(MetaClassRegistryImpl.java:524)
    at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanExtensionModuleFromProperties(ExtensionModuleScanner.java:87)
    at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanExtensionModuleFromMetaInf(ExtensionModuleScanner.java:81)
    at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanClasspathModulesFrom(ExtensionModuleScanner.java:63)
    at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanClasspathModules(ExtensionModuleScanner.java:54)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:125)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:86)
    at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
    ... 15 more

附加信息:这是我的 gradle.build 文件,可能存在一些我没有意识到的依赖问题

version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'io.qameta.allure'

sourceCompatibility = 1.8

//buildScan  termsOfServiceUrl = "https://gradle.com/terms-of-service"; termsOfServiceAgree = "yes" 
repositories 
    jcenter()
    mavenCentral()
    repositories 
        maven  url 'https://jitpack.io' 
    


buildscript 
    repositories 
        jcenter()
    
    dependencies 
        classpath "io.qameta.allure:allure-gradle:2.8.1"
    


dependencies 
    compile group: 'org.testng', name: 'testng', version: '7.4.0'
    compile group: 'com.codeborne', name: 'selenide', version: '5.6.1'
    compile group: 'io.appium', name: 'java-client', version: '7.3.0'
    compile group: 'com.github.appium', name: 'java-client', version: '7.3.0' // should have the same version as io.appium java-client

    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.19'

    compile group: 'org.json', name: 'json', version: '20190722'
    compile group: 'io.rest-assured', name: 'rest-assured', version: '4.2.0'
    compile group: 'io.rest-assured', name: 'json-schema-validator', version: '4.2.0'
    compile group: 'io.rest-assured', name: 'json-path', version: '4.2.0'
    compile group: 'io.rest-assured', name: 'xml-path', version: '4.2.0'
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.2'
    compile group: 'org.awaitility', name: 'awaitility', version: '3.0.0'

    compile group: 'log4j', name: 'log4j', version: '1.2.17'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.26'

    compile group: 'io.qameta.allure', name: 'allure-selenide', version: '2.15.0'
    compile group: 'io.qameta.allure', name: 'allure-rest-assured', version: '2.15.0'
    compile group: 'io.qameta.allure', name: 'allure-testng', version: '2.15.0'


allure 
    version = '2.15.0'
    autoconfigure = true
    aspectjweaver = true
    allureJavaVersion = '2.15.0'

在下面的同一个文件中,我有一些自动化测试任务

【问题讨论】:

哪个版本的 Gradle,你有一个简单的复制器项目来显示问题? 我在我的 PC 上使用 gradle 7.2,但我在项目中的 gradle.properties 文件有以下行:distributionUrl=https\://services.gradle.org/distributions/gradle-5.1 .1-所有.zip。我一直在使用 build.gradle 文件,以前它可以完美运行。 你在使用gradlew 运行这个命令来更新 gradle wrapper: ``` gradle wrapper --gradle-version 7.3 --distribution-type all ``` 你的插件可能会针对较新的 Gradle 版本进行更新,因此您需要确保使用更新的 Gradle 发行版。您的构建使用了许多已弃用的东西,但它应该仍然可以工作。 如果你声明了 allure 插件的版本(它可能在settings.gradle 中声明,如果是,我们可以确定它是为哪个版本的 Gradle 构建的),它可能工作得很好当您使用 ./gradlew ... 运行构建时...但几乎可以肯定,正确的做法是确保您使用的是该插件 (docs.qameta.io/allure-report/reporting/gradle) 和 Gradle 的最新版本。 【参考方案1】:

我遇到了依赖项问题。当执行 RestAssured 方法时,与其关联的 groovy 版本比已经执行的版本旧。我使用 CLI 导航到 gradle 文件所在的目录,执行“gradle -dependencies”,并根据 gradle 告诉我的内容更新依赖项。在此之后它开始工作。

【讨论】:

以上是关于Gradle groovy 和 RestAssured groovy 之间的版本冲突的主要内容,如果未能解决你的问题,请参考以下文章

Gradle / Groovy 语法和关键字

轻松理解gradle配置和Groovy语法

Gradle学习笔记之Groovy

Gradle groovy 和 RestAssured groovy 之间的版本冲突

Gradle必备--Groovy基础

Gradle进阶