Sbt升级错误:java.lang.ClassNotFoundException:okhttp3.Interceptor

问题描述 投票:0回答:1

我在尝试升级当前 sbt 版本时遇到问题 (

1.6.2
)。我尝试了
1.8.3
1.9.3

下面的错误输出是从

1.9.3
尝试中获得的:

java.lang.NoClassDefFoundError: okhttp3/Interceptor
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at sbt.internal.inc.ModuleUtilities$.getObject(ModuleUtilities.scala:24)
at sbt.internal.inc.ModuleUtilities$.getCheckedObject(ModuleUtilities.scala:32)
at sbt.internal.inc.ModuleUtilities$.$anonfun$getCheckedObjects$1(ModuleUtilities.scala:37)
at scala.collection.immutable.Stream.$anonfun$map$1(Stream.scala:418)
at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1173)
at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1163)
at scala.collection.generic.Growable.loop$1(Growable.scala:57)
at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:61)
at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:53)
at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:184)
at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:47)
at scala.collection.TraversableLike.to(TraversableLike.scala:786)
at scala.collection.TraversableLike.to$(TraversableLike.scala:783)
at scala.collection.AbstractTraversable.to(Traversable.scala:108)
at scala.collection.TraversableOnce.toList(TraversableOnce.scala:350)
at scala.collection.TraversableOnce.toList$(TraversableOnce.scala:350)
at scala.collection.AbstractTraversable.toList(Traversable.scala:108)
at scala.collection.immutable.List.$plus$plus(List.scala:216)
at sbt.internal.PluginDiscovery$.discoverAll(PluginDiscovery.scala:59)
at sbt.internal.Load$.loadPlugins(Load.scala:1330)
at sbt.internal.Load$.loadPluginDefinition(Load.scala:1275)
at sbt.internal.Load$.buildPlugins(Load.scala:1254)
at sbt.internal.Load$.plugins(Load.scala:1233)
at sbt.internal.Load$.$anonfun$loadUnit$2(Load.scala:701)
at sbt.internal.Load$.timed(Load.scala:1407)
at sbt.internal.Load$.$anonfun$loadUnit$1(Load.scala:701)
at sbt.internal.Load$.timed(Load.scala:1407)
at sbt.internal.Load$.loadUnit(Load.scala:695)
at sbt.internal.Load$.$anonfun$builtinLoader$4(Load.scala:493)
at sbt.internal.BuildLoader$.$anonfun$componentLoader$5(BuildLoader.scala:181)
at sbt.internal.BuildLoader.apply(BuildLoader.scala:246)
at sbt.internal.Load$.loadURI$1(Load.scala:555)
at sbt.internal.Load$.loadAll(Load.scala:571)
at sbt.internal.Load$.loadURI(Load.scala:501)
at sbt.internal.Load$.load(Load.scala:480)
at sbt.internal.Load$.$anonfun$apply$1(Load.scala:242)
at sbt.internal.Load$.timed(Load.scala:1407)
at sbt.internal.Load$.apply(Load.scala:242)
at sbt.internal.Load$.defaultLoad(Load.scala:57)
at sbt.BuiltinCommands$.liftedTree1$1(Main.scala:964)
at sbt.BuiltinCommands$.doLoadProject(Main.scala:964)
at sbt.BuiltinCommands$.$anonfun$loadProjectImpl$2(Main.scala:917)
at sbt.Command$.$anonfun$applyEffect$4(Command.scala:151)
at sbt.Command$.$anonfun$applyEffect$2(Command.scala:146)
at sbt.Command$.process(Command.scala:190)
at sbt.MainLoop$.$anonfun$processCommand$5(MainLoop.scala:246)
at scala.Option.getOrElse(Option.scala:189)
at sbt.MainLoop$.process$1(MainLoop.scala:246)
at sbt.MainLoop$.processCommand(MainLoop.scala:279)
at sbt.MainLoop$.$anonfun$next$5(MainLoop.scala:164)
at sbt.State$StateOpsImpl$.runCmd$1(State.scala:290)
at sbt.State$StateOpsImpl$.process$extension(State.scala:326)
at sbt.MainLoop$.$anonfun$next$4(MainLoop.scala:164)
at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
at sbt.MainLoop$.next(MainLoop.scala:164)
at sbt.MainLoop$.run(MainLoop.scala:145)
at sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:120)
at sbt.io.Using.apply(Using.scala:28)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:113)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:67)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:52)
at sbt.MainLoop$.runLogged(MainLoop.scala:43)
at sbt.StandardMain$.runManaged(Main.scala:225)
at sbt.xMain$.$anonfun$run$11(Main.scala:135)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at scala.Console$.withIn(Console.scala:230)
at sbt.internal.util.Terminal$.withIn(Terminal.scala:610)
at sbt.internal.util.Terminal$.$anonfun$withStreams$1(Terminal.scala:390)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at scala.Console$.withOut(Console.scala:167)
at sbt.internal.util.Terminal$.$anonfun$withOut$2(Terminal.scala:600)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at scala.Console$.withErr(Console.scala:196)
at sbt.internal.util.Terminal$.withOut(Terminal.scala:600)
at sbt.internal.util.Terminal$.withStreams(Terminal.scala:390)
at sbt.xMain$.withStreams$1(Main.scala:88)
at sbt.xMain$.run(Main.scala:123)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at sbt.internal.XMainConfiguration.run(XMainConfiguration.java:59)
at sbt.xMain.run(Main.scala:47)
at xsbt.boot.Launch$.$anonfun$run$1(Launch.scala:149)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:176)
at xsbt.boot.Launch$.run(Launch.scala:149)
at xsbt.boot.Launch$.$anonfun$apply$1(Launch.scala:44)
at xsbt.boot.Launch$.launch(Launch.scala:159)
at xsbt.boot.Launch$.apply(Launch.scala:44)
at xsbt.boot.Launch$.apply(Launch.scala:21)
at xsbt.boot.Boot$.runImpl(Boot.scala:78)
at xsbt.boot.Boot$.run(Boot.scala:73)
at xsbt.boot.Boot$.main(Boot.scala:21)
at xsbt.boot.Boot.main(Boot.scala)
Caused by: java.lang.ClassNotFoundException: okhttp3.Interceptor
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 96 more

JDK版本:11.0.19-tem(来自SDKMAN) 我使用了IntelliJ的sbt shell(2023.1.2 UE Build #IU-231.9011.34)

开始加载项目确认sbt和JDK版本:

$USER_HOME/.sdkman/candidates/java/11.0.19-tem/bin/java -Djline.terminal=jline.UnsupportedTerminal -Dsbt.log.noformat=true -Dfile.encoding=UTF-8 -Xss256m -Didea.managed=true -Dfile.encoding=UTF-8 -Didea.installation.dir=$USER_HOME/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9011.34/IntelliJ IDEA.app/Contents -jar $USER_HOME/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9011.34/IntelliJ IDEA.app.plugins/Scala/launcher/sbt-launch.jar
[info] welcome to sbt 1.9.3 (Eclipse Adoptium Java 11.0.19)

另一个观察结果是,根据 IntelliJ 的项目视图,导致反射错误的内部文件(来自

ModuleUtilities.scala
zinc-classpath
)的版本为 2.12-1.6.0,但是查看 at MVNRepo 它应该与 sbt 版本对齐。这可能更多是升级失败的症状:

更新 不幸的是,当使用 CLI 从存储库根目录执行 sbt --version

 时,我得到了相同的输出:

➜ sbt --version // same error output as above sbt script version: 1.9.3
我可以在项目视图的 IntelliJ 库部分的 

okhttp3.Interceptor

 下的 
okhttp-3.14.2.jar
 中看到 
sbt-1.9.3
,但自版本 
okhttp
 以来,似乎 
1.7.0 应该已被 删除

我也没有在使用 Coursier 的 sbt 1.9.3 版本中看到

okhttp3

 依赖项:

➜ 1.0 cs resolve -t org.scala-sbt:sbt:1.9.3 | grep okhttp Result:
JIC,我们的解决者:

resolvers ++= Resolver.sonatypeOssRepos("releases")

更新还有这个

resolvers ++= Seq( "Typesafe Repo" at "https://repo.typesafe.com/typesafe/releases/", "osgeo" at "https://repo.osgeo.org/repository/release/" )

build.properties

 文件:

sbt.version=1.9.3
FWIW 同样的错误发生在 CD 管道 (gitlab) 的一部分。这些是我们用于 Gitlab 运行程序的图像(我们使用 1.8.2):

SBT_IMAGE_11: sbtscala/scala-sbt:eclipse-temurin-11.0.17_8_1.8.2_2.13.10 SBT_IMAGE_8: sbtscala/scala-sbt:eclipse-temurin-8u352-b08_1.8.2_2.13.10
预期的 sbt 版本也在那里下载:

[info] [launcher] getting org.scala-sbt sbt 1.9.3 (this may take some time)... [info] [launcher] getting Scala 2.12.18 (for sbt)... [info] welcome to sbt 1.9.3 (Red Hat, Inc. Java 1.8.0_342)
如果有任何指导帮助,我将不胜感激。

sbt
1个回答
0
投票
谜底解开了。罪魁祸首是我们将工件发布到 Maven 存储库时的

"com.gilcloud" % "sbt-gitlab" % "0.0.6"

 依赖关系。

将该插件升级到版本

0.1.2

解决了该问题。好吧,差不多了..:

如果您有

sbt 多项目构建(就像我们一样),请注意,除了升级版本之外,您还必须将 gitlab 设置移动到每个子项目,例如

// in build.sbt lazy val gitlabSettings = Seq( ... GitlabPlugin.autoImport.gitlabDomain := "gitlab.com", GitlabPlugin.autoImport.gitlabProjectId := ... GitlabPlugin.autoImport.gitlabCredentials := ... ) lazy val module1 = (project in file("module1")) .settings( name := "module1", sharedSettings )
从历史的角度来看,我是如何找到罪魁祸首的可能很有趣:

我首先将缺少的类定义的工件添加到

project/plugins.sbt

(升级 sbt-gitlab 插件后你将不再需要它):

// in project/plugins.sbt libraryDependencies ++= Seq("com.squareup.okhttp3" % "okhttp" % "4.11.0")
此时 sbt 错误变得更具指示性 - 它开始抱怨 

sbt.internal.CustomHTTP

 包中的类缺少 
com.gilcloud
 依赖项。这促使我访问该插件的发布页面,在那里我找到了有关其 
修复 sbt 1.7.0+ 版本的注释。

© www.soinside.com 2019 - 2024. All rights reserved.