【问题标题】:How to force a specific dependency version in a gradle buildscript如何在 gradle buildscript 中强制使用特定的依赖版本
【发布时间】:2018-03-04 03:03:24
【问题描述】:

gradle-docker-plugin 和 SpringBootVersion 2.0.0.M4 有一个 issue
M4 使用较新的 jersey 客户端并使用 docker-plugin 以异常结束:

ERROR com.github.dockerjava.core.async.ResultCallbackTemplate - Error during callback
java.lang.IllegalStateException: InjectionManagerFactory not found.
    at org.glassfish.jersey.internal.inject.Injections.lambda$lookupInjectionManagerFactory$0(Injections.java:98)
    at java.util.Optional.orElseThrow(Optional.java:290)
    at org.glassfish.jersey.internal.inject.Injections.lookupInjectionManagerFactory(Injections.java:98)
    at org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:68)
    at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:432)
    at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:341)
    at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:826)
    at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:285)
    at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:143)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:112)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:108)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:99)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:456)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:357)
    at com.github.dockerjava.jaxrs.async.POSTCallbackNotifier.response(POSTCallbackNotifier.java:29)
    at com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier.call(AbstractCallbackNotifier.java:50)
    at com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier.call(AbstractCallbackNotifier.java:24)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我的主项目中的 BuildScript:

buildscript {
    ext {
        springBootVersion = "2.0.0.M4"
    }

    repositories {
        maven { url "https://repo.spring.io/plugins-snapshot" }
        maven { url "https://plugins.gradle.org/m2/" }
    }

    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
    }
}
....

如您所见,我们加载了 spring-boot-gradle-plugin version=2.0.0.M4 及其所有依赖项。

我的子项目 build.gradle:

apply plugin: "org.springframework.boot"
apply from: "docker.gradle"
....

最重要的是与子项目的build.gradle在同一目录下的docker.gradle文件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.bmuschko:gradle-docker-plugin:3.0.11'
    }
}

apply plugin: com.bmuschko.gradle.docker.DockerRemoteApiPlugin

import com.bmuschko.gradle.docker.tasks.image.*
...
task buildImage(type: DockerBuildImage, dependsOn: copyDockerFiles) {
    version.release = true
    dockerFile = file("${projectDir}/build/docker/Dockerfile")
    inputDir = file("${projectDir}/build/docker")
    tags = ['...']
}

我的问题: 如何知道哪个版本的球衣客户端加载了 SpringBoot 2.0.0.M4? 如何强制 docker.gradle 中的 gradle 使用特定版本的球衣客户端? 添加到类路径不起作用。我认为 gradle 只会使用最新版本,它将由 SpringBoot 2.0.0.M4 加载

【问题讨论】:

    标签: gradle dependency-management


    【解决方案1】:

    您必须在 build.gradle 依赖项中添加以下内容:This Link

    dockerJava 'com.nirima:docker-java-shaded:0.16.2'
    dockerJava 'org.slf4j:slf4j-simple:1.7.5'
    dockerJava 'cglib:cglib:3.2.0'
    

    之后,您必须按照This link 中的建议将“buildImage”和“tagImage”任务分开

    我已经测试过这个:spring boot 2.0.0.M6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 2016-07-29
      • 2012-12-05
      • 2019-12-29
      • 2020-11-07
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      相关资源
      最近更新 更多