尝试执行编译任务但无法加载神秘模块

如何解决尝试执行编译任务但无法加载神秘模块

我正在编译一个多部分的 Scala 项目。它不是那么大,但有些是 Scala 2.13,有些是 Scala 3。

尝试编译会产生致命错误 [UNRESOLVED DEPENDENCIES: base#base_2.12;0.1.0-SNAPSHOT:未找到]

问题是,字符串 {0.1.0-SNAPSHOT} 不会出现在我的 build.sbt 或其他任何地方。它曾经在那里,但它早已不复存在。我假设某些更新缓存包含它,但我一直找不到它。

这是我的 {build.sbt}:

ThisBuild / libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.7" % Test
ThisBuild / Compile / scalacoptions ++= Seq("--deprecation")

ThisBuild / Test / logBuffered := false
ThisBuild / Test / parallelExecution := false

lazy val scala213 = "2.13.5"
lazy val scala212 = "2.12.13"
lazy val scala3 = "3.0.0-RC2"
lazy val supportedScalaVersions = List(scala213,scala3)

lazy val root = (project in file("."))
  .aggregate(top,trans,base)
  .settings(
    name := "toysat"
  )

lazy val top = (project in file("top"))
  .settings(
    name := "main",scalaVersion := scala213,scalacoptions += "-Ytasty-reader",libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.7" % Test
  )
  .dependsOn(trans,base)

lazy val trans = (project in file("trans"))
   .settings(
     name := "trans",Compile / scalaVersion := scala3,libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.7" % Test
   ).
  dependsOn(base)

lazy val base = (project in file("base"))
  .settings(
    name := "base",libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.7" % Test
   

stackoverflow 上的大多数此类问题都与下载远程定义的模块有关。我遇到的问题是 sbt 找不到我的(新编译的)模块之一的过时版本。

这里是 sbt 命令输出(这是一个 Emacs 缓冲区):

sbt:toysat> reload
[info] welcome to sbt 1.5.5 (AdoptOpenJDK Java 1.8.0_292)
[info] loading project deFinition from /Users/drewmcdermott/BIG/RESEARCH/puzzles/toystory4/toysat/project
[info] loading settings for project root from build.sbt ...
[info] set current project to toysat (in build file:/Users/drewmcdermott/BIG/RESEARCH/puzzles/toystory4/toysat/)
sbt:toysat> compile
[info] compiling 4 Scala sources to /Users/drewmcdermott/BIG/RESEARCH/puzzles/toystory4/toysat/base/target/scala-2.13/classes ...
[warn] 
[warn]  Note: Unresolved dependencies path:
[info] done compiling
[error] stack trace is suppressed; run last trans / update for the full output
[error] (trans / update) sbt.librarymanagement.ResolveException: Error downloading base:base_2.12:0.1.0-SNAPSHOT
[error]   Not found
[error]   Not found
[error]   not found: /Users/drewmcdermott/.ivy2/localbase/base_2.12/0.1.0-SNAPSHOT/ivys/ivy.xml
[error]   not found: https://repo1.maven.org/maven2/base/base_2.12/0.1.0-SNAPSHOT/base_2.12-0.1.0-SNAPSHOT.pom
[error] Total time: 25 s,completed Jul 28,2021 11:06:18 PM

编译 base 子项目中的 4 个文件花费了 25 秒,显然是成功的。我认为当 sbt 尝试编译 trans 子项目时,它遇到了麻烦。

这是部分堆栈跟踪。除了涉及 Coursier 之外,这对我来说没有任何意义。

sbt:toysat> last trans / update
[debug] not up to date. inChanged = true,force = false
[debug] Updating trans...
[warn] 
[warn]  Note: Unresolved dependencies path:
[error] sbt.librarymanagement.ResolveException: Error downloading base:base_2.12:0.1.0-SNAPSHOT
[error]   Not found
[error]   Not found
[error]   not found: /Users/drewmcdermott/.ivy2/localbase/base_2.12/0.1.0-SNAPSHOT/ivys/ivy.xml
[error]   not found: https://repo1.maven.org/maven2/base/base_2.12/0.1.0-SNAPSHOT/base_2.12-0.1.0-SNAPSHOT.pom
[error]     at lmcoursier.CoursierDependencyResolution.unresolvedWarningOrThrow(CoursierDependencyResolution.scala:258)
[error]     at lmcoursier.CoursierDependencyResolution.$anonfun$update$38(CoursierDependencyResolution.scala:227)
[error]     at lmcoursier.CoursierDependencyResolution$$Lambda$4262/0x0000000000000000.apply(UnkNown Source)
[error]     at scala.util.Either$LeftProjection.map(Either.scala:573)
[error]     at lmcoursier.CoursierDependencyResolution.update(CoursierDependencyResolution.scala:227)
[error]     at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:60)
[error]     at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:59)

很明显某处的某个缓存保留了字符串 0.1.0-SNAPSHOT,但是缓存的数量非常多。我试过删除几个,但没有找到相关的。

谁能解释一下如何从这种情况中恢复过来?

解决方法

您的 base 项目仅针对 Scala 2.13 进行编译,而它被定义为针对 Scala 3 的 dependsOn 的依赖项(使用 trans)。

您应该为 Scala 2.13 和 3 交叉构建您的 base 项目(根据您的错误消息可能是 2.12,即使我没有看到您共享的内容中使用了 Scala 2.12)。

编辑:Scala 2.13 和 3 是兼容的,因此只有在仅针对 2.12 构建依赖项时才会出现此问题。

,

我不是因为我是一个自恋者而回答我自己的问题,而是因为我无法在评论中说出我想要的。加上编辑原始问题会将可能有用的信息埋在奇怪的地方。我已经投票并批准了@GaelJ 的回答。

我的 build.sbt 看起来没什么不同。可以通过显示修改后的 trans 子项目定义来封装差异:

lazy val trans = (projectMatrix in file("trans"))
   .settings(
     name := "trans",version := "0.3",// I thought this line was unnecessary,but without 
     // it sbt doesn't understand the command trans / compile --
     Compile / scalaVersion := scala3,libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.7" % Test
   )
  .jvmPlatform(scalaVersions = Seq(scala213))
  .dependsOn(base)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?