我正在尝试执行 Jenkins 工作,但由于以下原因而失败:java.lang.RuntimeException: Missing scala-library.jar
运行此行时:/usr/lib/jvm/java-1.8.0/bin/java -Xmx4250M -Dsbt.log.noformat=true -jar /tmp/jenkins/slaves/build-slave-cb996aa/tools/org.jvnet.hudson.plugins.SbtPluginBuilder_SbtInstallation/default/bin/sbt-launch.jar 'set credentials += Credentials("Artifactory Realm", $ARTIFACTORY_HOST, $USER, $PASSWORD)' assembly
从我自己的用户在计算机上或从根目录运行时,它可以正常工作(从jFrog获取 Artifact ,进行编译,运行测试并打包jar),但是从用户jenkins
运行时,它将失败。
我发现从根目录运行它时,它会在路径/root/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar
中找到该库
我正在使用sbt.version = 0.13.8
和scalaVersion := "2.11.11"
我显然不希望 Jenkins 的工作使用root用户,我们都知道那是不对的。
完整的堆栈为:
java.lang.RuntimeException: Missing scala-library.jar
at scala.sys.package$.error(package.scala:27)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1$$anonfun$file$1$1.apply(Defaults.scala:382)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1$$anonfun$file$1$1.apply(Defaults.scala:382)
at scala.Option.getOrElse(Option.scala:120)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1.file$1(Defaults.scala:382)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1.apply(Defaults.scala:384)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1.apply(Defaults.scala:374)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon$4.work(System.scala:63)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.Execute.work(Execute.scala:235)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[error] (*:scalaInstance) Missing scala-library.jar
谢谢!
最佳答案
几周前,我遇到了类似的问题。如果我能正确回忆起情况,则我的SBT构建使用了 coursier
插件(导致~/.coursier
(Windows上的%HOME%\.coursier
)由该构建创建和维护的目录),并且我也在使用本地 Artifact 存储库(在我的情况下为Nexus OSS) 。
我的问题原来是我的构建所使用的coursier
插件的版本。如果您使用的是coursier
v1.0.0-RC2(或者可能是v1.0.0-RC3)或更早的版本,那么这也许可以解释您的问题。
解决方案是删除.coursier
和.ivy2
目录(在本地缓存一些 Artifact ),将coursier
的版本更改为V1.0.0-RC4或更高版本,然后重试构建。 (在您的情况下,这些目录将位于jenkins
帐户主目录中的Jenkins服务器上。)