gpt4 book ai didi

java - sbt 托管依赖检索错误的版本

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:54 24 4
gpt4 key购买 nike

我正在通过 Play 框架使用 SBT,但我在 build.sbt 文件中遇到了管理依赖项的问题。

我的 build.sbt 文件:

name := "name"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
"de.undercouch" % "bson4jackson" % "2.1.0" force(),
"com.fasterxml.jackson.core" % "jackson-databind" % "2.1.0" force(),
"com.fasterxml.jackson.core" % "jackson-annotations" % "2.1.0" force(),
"com.fasterxml.jackson.core" % "jackson-core" % "2.1.0" force(),
"org.mongodb" % "mongo-java-driver" % "2.11.3",
"org.jongo" % "jongo" % "0.4",
"uk.co.panaxiom" %% "play-jongo" % "0.6.0-jongo0.4",
"org.glassfish.jersey.core" % "jersey-client" % "2.4",
"org.glassfish.jersey.core" % "jersey-common" % "2.4",
"org.glassfish.jersey.core" % "jersey-server" % "2.4",
"org.glassfish.jersey.containers" % "jersey-container-jdk-http" % "2.4"
)

play.Project.playJavaSettings

当我尝试在我的生产环境 (Ubuntu) 上构建时,我收到以下错误: M[2K[0m[[0minfo[0m] [0mResolving org.glassfish.jersey.core#jersey-client;2.4 ...[0m

M[2K[0m[[0minfo[0m] [0mResolving org.glassfish.jersey.core#jersey-common;2.4 ...[0m

M[2K[0m[[0minfo[0m] [0mResolving javax.ws.rs#javax.ws.rs-api;2.0 ...[0m

M[2K[0m[[0minfo[0m] [0mResolving javax.annotation#javax.annotation-api;1.2 ...[0m

M[2K[0m[[0minfo[0m] [0mResolving org.glassfish.hk2#hk2-api;2.2.0-b21 ...[0m
M[2K[0m[[0minfo[0m] [0mResolving org.glassfish.hk2#hk2-utils;2.4 ...[0m
[0m[[33mwarn[0m] [0m module not found: org.glassfish.hk2#hk2-utils;2.4[0m
[0m[[33mwarn[0m] [0m==== local: tried[0m
[0m[[33mwarn[0m] [0m /opt/play/repository/local/org.glassfish.hk2/hk2-utils/2.4/ivys/ivy.xml[0m
[0m[[33mwarn[0m] [0m==== Maven2 Local: tried[0m
[0m[[33mwarn[0m] [0m file:/root/.m2/repository/org/glassfish/hk2/hk2-utils/2.4/hk2-utils-2.4.pom[0m

有趣的是,这个构建在我的开发环境中没有问题(还有 Ubuntu,我相信运行与生产环境中使用的所有内容相同的版本。)

问题似乎出在 sbt 试图检索不存在的 hk2-utils 2.4 版。我追踪到 hk2-api 包,它在其 POM 文件中包含以下内容:

<dependency>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2-utils</artifactId>
<version>${project.version}</version>
</dependency>

我相信正在发生的事情是 ${project.version} 在我的生产环境中被设置为 2.4(这是此依赖树根部的 jersey-client 的版本号) 而不是使用它的直接前身的版本号。 org.glassfish.hk2#hk2-api;2.2.0-b21

我想知道这是 sbt 的错误,我的 sbt 配置的错误,还是什么。我还想知道是否有任何方法可以通过配置选项或以某种方式更改 hk2-api 的 POM 来修复它。

最佳答案

我不太熟悉 POMS 及其工作原理,所以我无法解释为什么模块使用该版本解析。但是,我重现了您的问题,并且有一个解决方法可以添加到您的 SBT 设置中。

dependencyOverrides ~= { overrides => 
overrides + "org.glassfish.hk2" % "hk2-utils" % "2.2.0-b21"
}

sbt 中的 dependencyOverrides 设置可以让你强制依赖的特定版本,与其他地方指定的版本无关,无论是传递的还是显式的。事实上,即使像这里的情况那样纯粹传递依赖关系,它也能正常工作。 (文档:http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Library-Management.html#forcing-a-revision-without-introducing-a-dependency)

将它添加到您的 build.sbt 中应该会强制 hk2-utils 使用 2.2.0-b21 版本进行解析,而不会将其实际添加为您项目的直接依赖项。

关于java - sbt 托管依赖检索错误的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com