在 gradle 插件中强制使用依赖版本

Ric*_*ick 2 gradle gradle-plugin

是否可以强制 gradle 在插件中使用不同的依赖项?

我想运行 openapi-generator 5.1.1 插件,但我希望它使用 swagger-parser 2.0.26。其原因就是下面提到的问题。在该问题中,用户“selliera”提到他能够运行具有该依赖项的插件(好吧,他提到了 2.0.20,但未发布的修复程序使用 2.0.26)。

https://github.com/OpenAPITools/openapi-generator/issues/8266

我尝试过使用严格版本:

dependencies {
    implementation("io.swagger.parser.v3:swagger-parser") {
        version {
            strictly "2.0.26"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用

configurations.all {
    resolutionStrategy {
        eachDependency { DependencyResolveDetails details ->
            if (details.requested.group == 'io.swagger.parser.v3' && details.requested.name =='swagger-parser') {
                details.useVersion("2.0.26")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但似乎都没有任何效果。

这是一个简单的 gradle 脚本来演示该问题。如果将petstore 规范的内容放入下面脚本中指定的 petstore.yml 文件中并运行openApiGenerate,则它可以正常工作。如果您将 petstore 规范中的 url 更改为相对的 URL(如链接问题中所示),则生成器将失败。使用新版本的 swagger-parser 应该可以解决这个问题。

plugins {
    id 'java'
    id 'org.openapi.generator' version '5.1.1'
}

repositories {
    mavenCentral()
}

openApiGenerate {
    generatorName = 'spring'
    inputSpec = "$rootDir/src/main/resources/petstore.yml"
}
Run Code Online (Sandbox Code Playgroud)

Bla*_*kor 6

对我有用(gradle 5.6.4):

  • 要强制使用插件的依赖版本,请将其添加到 build.gradle 脚本的顶部(plugins {}块之前):
buildscript {
    configurations.all {
        resolutionStrategy {
            force 'io.swagger.parser.v3:swagger-parser:2.0.26'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 澄清一下,如果您在buildscript {}块之外添加类似的配置,它将强制应用程序的依赖版本:
configurations.all {
    resolutionStrategy {
        force 'io.swagger.parser.v3:swagger-parser:2.0.26'
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:现在 swagger-parser 2.0.26 是 openapi-generator 5.4.0 的默认版本

PPS:我知道,这是一个老问题,但在 Google 中仍然名列前茅