当前位置: 首页 > 知识库问答 >
问题:

如何在gradle buildscript中强制使用特定的依赖版本

马阳曦
2023-03-14

渐变-泊坞插件和Spring靴版本 2.0.0.M4
M4 使用较新的客户端,并且使用 docker 插件以异常结尾,存在一个问题:

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 {
    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及其所有依赖项。

我的子项目构建:gradle:

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

最重要的是,docker.gradle文件与子项目的build.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 = ['...']
}

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

共有1个答案

王轶
2023-03-14

您必须在 build.gradle 依赖项中添加以下内容,如以下说明所示:此链接

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

之后,您必须按照此链接中的建议将“构建图像”和“标记图像”任务分开

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

 类似资料:
  • 假设<code>B:1.0.1,但是子项目应该依赖于<code>A:1.2(有意覆盖传递依赖性)。 很容易发现 ,并从它的所有子POM中删除样板文件。不幸的是,下面的设置导致在最终的工件中使用两个版本:< code>A:1.0.1(作为< code>B:1.0.1的依赖项)和< code>A:1.0.2(来自父pom中的显式声明)。 如何在所有子项目中强制使用< code>A:1.0.2版本,并在

  • 我无法使用Gradle强制生成依赖项的版本。我的目标是使用0.20.0版本。发布了Spring HATEOAS库的,但尽管我付出了所有的努力,它仍然解析为0.19.0。释放。 我尝试了许多策略,包括孤立的策略和相互结合的策略。这些策略包括但可能不限于以下策略(请注意,在所有情况下都在文件中定义,该文件位于声明Spring HATEOAS依赖项的模块目录的父目录中): #1(在声明依赖关系的模块的b

  • 问题内容: 我使用以下两个依赖项: 两者必须为同一版本才能正常工作。由于我的其他依赖项使用更高的版本,因此Gradle为每个依赖项使用不同的版本。 我通过运行发现了这一点: 如何强制Gradle为这两个依赖项设置相同的版本? 问题答案: 您的依赖项之一是强制更新番石榴版本。使用以定位库驱逐你的版本。 您遇到的问题是,如果您强迫它使用14.0.1,则另一个库可能无法正常工作。您是否可以仅使用17.0

  • 我使用以下两个依赖项: 两者必须是相同的版本才能正常工作。由于我的其他依赖项使用更高的版本,Gradle为每个依赖项使用不同的版本。 我通过运行找到了这一点: 如何强制Gradle为这两个依赖项设置相同的版本?

  • 问题内容: 为了利用C 11和c 14功能,我有一个使用较新版本的gcc(4.9.1)和较新的libstdc 编译的应用程序。该应用程序由许多小程序组成,因此我将libstdc 作为共享库而不是静态库进行链接(即,我不希望使用-static-libstdc ++) 我希望将新版本的libstdc ++与应用程序一起放在/ opt // lib64下(注意:GPL的例外明确允许这样做) libstd

  • 我正在与Maven一起使用Pact JVM/Java(Version3)。中没有项目版本控制--它只是版本。在Pact Maven插件中配置的与Maven project version-相同。 我应该玩和吗?我是否应该升级到Pact版本4并使用消费者版本选择器?