gpt4 book ai didi

maven - 为什么 SBT 无法解决我的依赖问题?

转载 作者:行者123 更新时间:2023-12-01 11:40:08 24 4
gpt4 key购买 nike

由于某种原因,我需要使用 Maven Central 删除 jar 的 JMS 1.1。

我将 JBoss 存储库添加到我的存储库列表中:

resolvers += "JBoss" at "https://repository.jboss.org/nexus/content/groups/public"

,但是当我尝试使用 0.13.1 构建时出现以下错误:
25-Feb-2014 19:22:41    [warn]         [NOT FOUND  ] javax.jms#jms;1.1!jms.jar (0ms)
25-Feb-2014 19:22:41 [warn] ==== public: tried
25-Feb-2014 19:22:41 [warn] http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.jar
25-Feb-2014 19:22:41 [warn] ::::::::::::::::::::::::::::::::::::::::::::::
25-Feb-2014 19:22:41 [warn] :: FAILED DOWNLOADS ::
25-Feb-2014 19:22:41 [warn] :: ^ see resolution messages for details ^ ::
25-Feb-2014 19:22:41 [warn] ::::::::::::::::::::::::::::::::::::::::::::::
25-Feb-2014 19:22:41 [warn] :: javax.jms#jms;1.1!jms.jar
25-Feb-2014 19:22:41 [warn] ::::::::::::::::::::::::::::::::::::::::::::::
25-Feb-2014 19:22:41 [info] Wrote /appdata/liquidnet/data/BambooAgent/build-dir/TICKDB-SP-JOB1/src/target/scala-2.10/pretrade-scala_2.10-1.0.pom
25-Feb-2014 19:22:41 sbt.ResolveException: download failed: javax.jms#jms;1.1!jms.jar

我看到了一些关于设置 externalResolvers 的东西,所以它不使用 Maven 中心,但我实际上想将 Maven 中心用于我拥有的所有其他依赖项。

当我发出 last *:update 时,我看到以下内容

[信息] 解决 javax.jms#jms;1.1 ...
[调试] sbt-chain:检查缓存:依赖项:javax.jms#jms;1.1 {compile=[default(compile)]}
[调试] 试过/home/dnugent/.ivy2/local/javax.jms/jms/1.1/ivys/ivy.xml
[调试] 本地:找不到 javax.jms#jms;1.1 的 Ivy 文件
[调试] 试过 http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom
[调试] 公共(public):找到 javax.jms#jms;1.1 的 md 文件
[调试] => http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom (1.1)
[调试] 下载 http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom ...
[debug] public:下载http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom
[debug] public:下载http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom.sha1
[调试] http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom 的 sha1 OK
[调试] [成功] javax.jms#jms;1.1!jms.pom(pom.original) (121ms)
[调试] 试过/home/dnugent/.ivy2/local/javax.jms/jms/1.1/jars/jms.jar
[调试] 试过 http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.jar
[调试] 客户端错误:未找到 url=http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.jar
[调试] 试过 https://repository.jboss.org/nexus/content/groups/public/javax/jms/jms/1.1/jms-1.1.jar
[debug] 公开发现 javax.jms#jms;1.1

JMS 1.1 Jar 肯定在 JBoss 存储库中,所以我对这里发生的事情感到非常困惑。

最佳答案

正如我在 the ticket you opened 中解释的那样,发生的事情是 Ivy 正在寻找 pom.xml文件在特定的解析器(在本例中为 maven-central),但无法在那里找到 jar 文件。这导致 Ivy 完全放弃解析,而不是仅仅将解析器标记为坏并继续前进。

您需要做的是确保在您的“坏”解析器之前订购您想要的“好”解析器。您可以通过 show fullResolvers 查看 sbt 将要使用的解析器的有序列表。命令。这是一个例子:

> show fullResolvers
[info] ArrayBuffer(Raw(ProjectResolver(inter-project, mapped: )), URLRepository(typesafe-ivy-releases,Patterns(ivyPatterns=List(http://repo.typesafe.com/typesafe/ivy-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), artifactPatterns=List(http://repo.typesafe.com/typesafe/ivy-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), isMavenCompatible=false, descriptorOptional=false, skipConsistencyCheck=false)), URLRepository(sbt-plugin-releases,Patterns(ivyPatterns=List(http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), artifactPatterns=List(http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), isMavenCompatible=false, descriptorOptional=false, skipConsistencyCheck=false)), FileRepository(local,FileConfiguration(true,None),Patterns(ivyPatterns=List(${ivy.home}/local/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), artifactPatterns=List(${ivy.home}/local/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), isMavenCompatible=false, descriptorOptional=false, skipConsistencyCheck=false)), public: http://repo1.maven.org/maven2/)

不幸的是,这个输出现在对人类来说是不可读的。 (请开票 export命令支持 fullResolvers,我以后可以改进调试)。但是,我们可以做一些穷人的调试,添加到 build.sbt :
val exportFullResolvers = taskKey[Unit]("debug resolvers")

exportFullResolvers := {
for {
(resolver,idx) <- fullResolvers.value.zipWithIndex
} println(s"${idx}. ${resolver.name}")
}

现在,你可以在你的 sbt 构建中运行这个任务来计算/玩弄解析器的顺序:
> exportFullResolvers
0. inter-project
1. typesafe-ivy-releases
2. sbt-plugin-releases
3. local
4. public
[success] Total time: 0 s, completed Feb 26, 2014 6:10:07 PM

您需要修改解析器,以便项目间首先出现,但“公共(public)”(maven 中心)位于 jboss 解析器之后。您可以通过以下方式修改 build.sbt 中的内联解析器:
fullResolvers := {
val previous = fullResolvers.value
previous.sortWith { (lhs, rhs) => ??? /* You define something here */ }
}

关于maven - 为什么 SBT 无法解决我的依赖问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029393/

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