Docker环境下Play Framework项目activator clean执行失败求助
Docker环境下Play Framework项目执行
activator clean失败 我是Scala和sbt新手,在Docker环境构建Play Framework项目时,执行activator clean命令失败,不清楚问题出在哪,也不知道报错里的http仓库地址来源。
报错信息
#25 7.062 [error] Server access Error: Unexpected end of file from server url=http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/sbt-fork-run-plugin/scala_2.10/sbt_0.13/2.3.10/ivys/ivy.xml #25 7.851 [error] Server access Error: Unexpected end of file from server url=http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.play/sbt-fork-run-plugin/scala_2.10/sbt_0.13/2.3.10/ivys/ivy.xml #25 18.62 [error] Server access Error: Unexpected end of file from server url=http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/sbt-fork-run-protocol_2.10/2.3.10/ivys/ivy.xml #25 20.98 [error] Server access Error: Unexpected end of file from server url=http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.play/sbt-fork-run-protocol_2.10/2.3.10/ivys/ivy.xml #25 26.31 [error] Server access Error: Unexpected end of file from server url=http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/sbt-fork-run-protocol_2.10/2.3.10/jars/sbt-fork-run-protocol_2.10.jar #25 27.20 [error] Server access Error: Unexpected end of file from server url=http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.play/sbt-fork-run-protocol_2.10/2.3.10/jars/sbt-fork-run-protocol_2.10.jar #25 32.55 [error] Server access Error: Unexpected end of file from server url=http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/sbt-run-support_2.10/2.3.10/ivys/ivy.xml #25 33.37 [error] Server access Error: Unexpected end of file from server url=http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.play/sbt-run-support_2.10/2.3.10/ivys/ivy.xml #25 37.00 [error] Server access Error: Unexpected end of file from server url=http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.play/sbt-run-support_2.10/2.3.10/jars/sbt-run-support_2.10.jar #25 37.88 [error] Server access Error: Unexpected end of file from server url=http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.play/sbt-run-support_2.10/2.3.10/jars/sbt-run-support_2.10.jar .... #25 1301.1 [warn] [NOT FOUND ] org.apache.commons#commons-compress;1.7!commons-compress.jar (2ms) #25 1301.1 [warn] ==== activator-launcher-local: tried #25 1301.1 [warn] file:/usr/local/activator-dist-1.3.12/repository/org.apache.commons/commons-compress/1.7/jars/commons-compress.jar #25 1301.1 [warn] [NOT FOUND ] org.tukaani#xz;1.4!xz.jar (0ms) #25 1301.1 [warn] ==== activator-launcher-local: tried #25 1301.1 [warn] file:/usr/local/activator-dist-1.3.12/repository/org.tukaani/xz/1.4/jars/xz.jar #25 1349.6 [warn] :::::::::::::::::::::::::::::::::::::::::::::: #25 1349.6 [warn] :: FAILED DOWNLOADS :: #25 1349.6 [warn] :: ^ see resolution messages for details ^ :: #25 1349.6 [warn] :::::::::::::::::::::::::::::::::::::::::::::: #25 1349.6 [warn] :: org.apache.commons#commons-compress;1.7!commons-compress.jar #25 1349.6 [warn] :: org.tukaani#xz;1.4!xz.jar #25 1349.6 [warn] :::::::::::::::::::::::::::::::::::::::::::::: #25 1349.9 sbt.ResolveException: download failed: org.apache.commons#commons-compress;1.7!commons-compress.jar #25 1349.9 download failed: org.tukaani#xz;1.4!xz.jar #25 1349.9 at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:217) #25 1349.9 at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:126) #25 1349.9 at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:125) #25 1349.9 at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:115) #25 1349.9 at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:115) #25 1349.9 at sbt.IvySbt$$anonfun$withIvy$1.apply(Ivy.scala:103) #25 1349.9 at sbt.IvySbt.sbt$IvySbt$$action$1(Ivy.scala:48) #25 1349.9 at sbt.IvySbt$$anon$3.call(Ivy.scala:57) #25 1349.9 at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:93) #25 1349.9 at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:78) #25 1349.9 at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:97) #25 1349.9 at xsbt.boot.Using$.withResource(Using.scala:10) #25 1349.9 at xsbt.boot.Using$.apply(Using.scala:9) #25 1349.9 at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58) #25 1349.9 at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48) #25 1349.9 at xsbt.boot.Locks$.apply0(Locks.scala:31) #25 1349.9 at xsbt.boot.Locks$.apply(Locks.scala:28) #25 1349.9 at sbt.IvySbt.withDefaultLogger(Ivy.scala:57) #25 1349.9 at sbt.IvySbt.withIvy(Ivy.scala:98) #25 1349.9 at sbt.IvySbt.withIvy(Ivy.scala:94) #25 1349.9 at sbt.IvySbt$Module.withModule(Ivy.scala:115) #25 1349.9 at sbt.IvyActions$.update(IvyActions.scala:125) #25 1349.9 at sbt.Classpaths$$anonfun$sbt$Classpaths$$work$1$1.apply(Defaults.scala:1223) #25 1349.9 at sbt.Classpaths$$anonfun$sbt$Classpaths$$work$1$1.apply(Defaults.scala:1221) #25 1349.9 at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$74.apply(Defaults.scala:1244) #25 1349.9 at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$74.apply(Defaults.scala:1242) #25 1349.9 at sbt.Tracked$$anonfun$lastOutput$1.apply(Tracked.scala:35) #25 1349.9 at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:1246) #25 1349.9 at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:1241) #25 1349.9 at sbt.Tracked$$anonfun$inputChanged$1.apply(Tracked.scala:45) #25 1349.9 at sbt.Classpaths$.cachedUpdate(Defaults.scala:1249) #25 1349.9 at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1214) #25 1349.9 at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1192) #25 1349.9 at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) #25 1349.9 at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42) #25 1349.9 at sbt.std.Transform$$anon$4.work(System.scala:64) #25 1349.9 at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) #25 1349.9 at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) #25 1349.9 at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) #25 1349.9 at sbt.Execute.work(Execute.scala:244) #25 1349.9 at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) #25 1349.9 at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) #25 1349.9 at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) #25 1349.9 at sbt.CompletionService$$anon$2.call(CompletionService.scala:30) #25 1349.9 at java.util.concurrent.FutureTask.run(FutureTask.java:266) #25 1349.9 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) #25 1349.9 at java.util.concurrent.FutureTask.run(FutureTask.java:266) #25 1349.9 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) #25 1349.9 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) #25 1349.9 at java.lang.Thread.run(Thread.java:750) #25 1349.9 [error] (*:update) sbt.ResolveException: download failed: org.apache.commons#commons-compress;1.7!commons-compress.jar #25 1349.9 [error] download failed: org.tukaani#xz;1.4!xz.jar #25 1350.0 Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
plugins.sbt文件内容
// Comment to get more information during initialization logLevel := Level.Warn // The Typesafe repository resolvers += "Local Maven Repository" at "file:///"+Path.userHome.absolutePath+"/.m2/repository" resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/" resolvers += "sonatype-releases" at "https://oss.sonatype.org/content/repositories/releases/" // Use the Play sbt plugin for Play projects addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.10") addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.2.0") addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.3.2")
~/.sbt仓库配置(已复制到Dockerfile)
[repositories] local activator-launcher-local: file://${activator.local.repository-${activator.home-${user.home}/.activator}/repository}, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] activator-local: file://${activator.local.repository-/Users/ishaankanwar/br/tools/activator-dist-1.3.12/repository}, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] sbt-releases-repo: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] sbt-plugins-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] maven-central: https://repo1.maven.org/maven2/ typesafe-releases: https://repo.typesafe.com/typesafe/releases typesafe-ivy-releasez: https://repo.typesafe.com/typesafe/ivy-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
问题分析与解决方法
问题根源
- HTTP仓库地址来源:报错里的HTTP仓库地址来自你复制到Docker的
~/.sbt仓库配置,其中sbt-releases-repo和sbt-plugins-repo原本使用HTTP协议,但现在这些仓库已强制HTTPS访问,HTTP请求会被截断,导致"Unexpected end of file"错误。 - 无效本地仓库:
activator-local配置里的路径是你本地Mac的路径(/Users/ishaankanwar/...),在Docker容器中不存在,会导致无效查找并浪费时间。 - 依赖下载失败:
commons-compress和xz依赖找不到,是因为本地仓库没有,且配置里的仓库访问异常,无法从远程拉取。
解决步骤
- 修复仓库协议:修改
~/.sbt仓库配置中的HTTP地址为HTTPS(如果还没改):- 将
sbt-releases-repo的http://repo.typesafe.com/typesafe/ivy-releases/改为https://repo.typesafe.com/typesafe/ivy-releases/ - 将
sbt-plugins-repo的http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/改为https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
- 将
- 移除无效本地仓库:删除
activator-local这一行,避免在Docker容器中查找不存在的路径。 - 调整仓库优先级:确保
maven-central在仓库列表中靠前,让sbt优先从中央仓库拉取通用依赖(比如commons-compress和xz)。 - Docker构建优化:在Dockerfile中先执行
activator update预下载所有依赖,再执行activator clean,避免构建时重复下载依赖。
修改后的仓库配置示例:
[repositories] local activator-launcher-local: file://${activator.local.repository-${activator.home-${user.home}/.activator}/repository}, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion
相关产品推荐
相关产品推荐

