为什么 运行 通过 jenkins 用户对 build slave 进行的测试会因缺少 scala-library.jar 而失败?
Why does running tests through jenkins user on build slave fail with Missing scala-library.jar?
我正在尝试 运行 一项詹金斯工作,由于以下原因而失败: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
当 运行从我自己的机器上的用户或从 root 用户使用时,它工作正常(从 jFrog 获取工件,编译,运行s 测试并打包 jar),但是当来自用户 jenkins
的 运行ning 失败时。
我发现当 运行 从根目录中打开它时,它会在路径 /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$$anonfun$file.apply(Defaults.scala:382)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$$anonfun$file.apply(Defaults.scala:382)
at scala.Option.getOrElse(Option.scala:120)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate.file(Defaults.scala:382)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate.apply(Defaults.scala:384)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate.apply(Defaults.scala:374)
at scala.Function1$$anonfun$compose.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon.work(System.scala:63)
at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.Execute.work(Execute.scala:235)
at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
at sbt.ConcurrentRestrictions$$anon$$anonfun.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon.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
谢谢!
看起来 root 用户的库路径指向 .cache。您是否尝试清除缓存。
你也可以通过执行从
获得的以下命令来尝试
https://github.com/sbt/sbt-assembly
assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = true)
几周前我遇到了类似的问题。如果我没记错的话,我的 SBT 构建使用了 coursier
插件(导致 ~/.coursier
—%HOME%\.coursier
on Windows—由构建创建和维护的目录)并且我还在使用本地工件存储库(Nexus OSS,在我的例子中)。
我的问题原来是我的构建使用的 coursier
插件的版本。如果您使用的是 coursier
v1.0.0-RC2(或者可能是 v1.0.0-RC3)或更早版本,那么这可能解释你的问题。
解决方案是删除 .coursier
和 .ivy2
目录(在本地缓存一些工件),将 coursier
的版本更改为 V1.0.0- RC4 或更高版本,然后重试构建。 (在你的情况下,这些目录将在你的 Jenkins 服务器上,在 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
当 运行从我自己的机器上的用户或从 root 用户使用时,它工作正常(从 jFrog 获取工件,编译,运行s 测试并打包 jar),但是当来自用户 jenkins
的 运行ning 失败时。
我发现当 运行 从根目录中打开它时,它会在路径 /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$$anonfun$file.apply(Defaults.scala:382)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$$anonfun$file.apply(Defaults.scala:382)
at scala.Option.getOrElse(Option.scala:120)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate.file(Defaults.scala:382)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate.apply(Defaults.scala:384)
at sbt.Defaults$$anonfun$scalaInstanceFromUpdate.apply(Defaults.scala:374)
at scala.Function1$$anonfun$compose.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon.work(System.scala:63)
at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.Execute.work(Execute.scala:235)
at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
at sbt.ConcurrentRestrictions$$anon$$anonfun.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon.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
谢谢!
看起来 root 用户的库路径指向 .cache。您是否尝试清除缓存。
你也可以通过执行从
获得的以下命令来尝试https://github.com/sbt/sbt-assembly
assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = true)
几周前我遇到了类似的问题。如果我没记错的话,我的 SBT 构建使用了 coursier
插件(导致 ~/.coursier
—%HOME%\.coursier
on Windows—由构建创建和维护的目录)并且我还在使用本地工件存储库(Nexus OSS,在我的例子中)。
我的问题原来是我的构建使用的 coursier
插件的版本。如果您使用的是 coursier
v1.0.0-RC2(或者可能是 v1.0.0-RC3)或更早版本,那么这可能解释你的问题。
解决方案是删除 .coursier
和 .ivy2
目录(在本地缓存一些工件),将 coursier
的版本更改为 V1.0.0- RC4 或更高版本,然后重试构建。 (在你的情况下,这些目录将在你的 Jenkins 服务器上,在 jenkins
帐户主页中。)