解決Unresolved dependencies: unable to get resource for io.spray#sbt-revolver;0.9.1

系統環境:
Windows, scala-2.12.10,JDK-1.8_40


D:\workspace\akka-quickstart-scala>sbt.bat 運行後出錯部分信息如下:

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] io.spray:sbt-revolver:0.9.1 (scalaVersion=2.12, sbtVersion=1.0)
[warn]
[warn] Note: Unresolved dependencies path:
[warn] io.spray:sbt-revolver:0.9.1 (scalaVersion=2.12, sbtVersion=1.0)
(D:\workspace\akka-quickstart-scala\project\plugins.sbt#L7-8)
[warn] +- default:akka-quickstart-scala-build:0.1.0-SNAPSHOT (scalaVe
rsion=2.12, sbtVersion=1.0)
[error] sbt.librarymanagement.ResolveException: unresolved dependency: io.spray#sbt-revolver;0.9.1: Resolution failed several times for dependency: io.spray#sbt-revolver;0.9.1 {compile=[default(compile)]}::
[error]  typesafe-ivy-releases: unable to get resource for io.spray#sbt-revolver;0.9.1: res=https://repo.typesafe.com/typesafe/ivy-releases/io.spray/sbt-revolver/scala_2.12/sbt_1.0/0.9.1/ivys/ivy.xml: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[error] sbt-plugin-releases: unable to get resource for io.spray#sbt-revolver;0.9.1: res=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/io.spray/sbt-revolver/scala_2.12/sbt_1.0/0.9.1/ivys/ivy.xml: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
......
  1. 將項目工程根目錄下的build.sbt文件(即akka-quickstart-scala\build.sbt)中的scalaVersion := "2.12.10"填寫爲當前系統環境中安裝的scala版本號。

  2. 在akka-quickstart-scala\project\plugins.sbt文件中添加能夠下載到缺失的依賴包的URL。例如此處的參考了該link 添加Resolver.url("Plugin Releases", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns) 解決了問題。
    最終的plugins.sbt文件內容如下:

    resolvers ++= Seq(
      "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/",   	  
      "Spray repository"    at "http://repo.spray.io/",
      "Scalaz Bintray Repo" at "http://dl.bintray.com/scalaz/releases",
      Resolver.url("Plugin Releases", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)
    )
    
    addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
    

    注意:

    1. 在瀏覽器中檢測一下添加的URL是否是真的能夠下載到依賴的有效路徑。因爲有些解決方法給出的URL已經失效了不可用。
    2. 起初將resolvers添加在build.sbt文件中不起作用,然後由參考2可知sbt 的 plugins.sbt 中的插件需要單獨在此插件定義中定義resolvers。 在build.sbt中定義的resolver在plugins中不起作用。
    3. 由於新版的scala在下載java依賴包時可能會用到https的URL要求SSL certification的情況,導致報錯PKIX path building failed: SunCertPathBuilderException: unable to find valid certification path to requested target. 解決方法見該link

此外,如果遇到如下找不到scala-library的錯誤,首先要檢查build.sbt文件中設置的scala版本號scalaVersion := "2.xx.yy"是否正確。

[warn]  module not found: org.scala-lang#scala-library;2.12
[warn] ==== local: tried
[warn]   C:\Users\Jeremy\.ivy2\local\org.scala-lang\scala-library\2.12\ivys\ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.12/scala-library-2.12.pom
......
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scala-lang#scala-library;2.12: not found
[warn]  :: org.scala-lang#scala-reflect;2.12: not found
[warn]  :: org.scala-lang#scala-compiler;2.12: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
.....
[error] sbt.librarymanagement.ResolveException: unresolved dependency: org.scala-lang#scala-library;2.12: not found
[error] unresolved dependency: org.scala-lang#scala-reflect;2.12: not found
[error] unresolved dependency: org.scala-lang#scala-compiler;2.12: not found
[error]         at sbt.internal.librarymanagement.IvyActions$.resolveAndRetrieve
(IvyActions.scala:334)
[error]         at sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEit
her$1(IvyActions.scala:208)
[error]         at sbt.internal.librarymanagement.IvyActions$$$Lambda$2597/10344
10143.apply(Unknown Source)
[error]         at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withMod
ule$1(Ivy.scala:243)
[error]         at sbt.internal.librarymanagement.IvySbt$Module$$Lambda$2598/510
626047.apply(Unknown Source)

上述錯誤就是因爲起初在build.sbt文件中設置scala版本號爲scalaVersion := "2.12"導致https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.12/爲無效URL。
當版本號填寫完整後改爲scalaVersion := "2.12.10"時,URL: https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.10/爲有效的,便解決了報錯問題。


參考:

[1] module not found: io.spray#sbt-revolver;0.7.2 using intellij 14.1.4 with sbt 0.13.5
[2] sbt + scala + akka
[3] sbt.ResolveException: unresolved dependency: org.scala-lang#scala-library;2.10: not found
[4] 解決PKIX path building failed: SunCertPathBuilderException: unable to find valid certification path

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章