公式を見ながらplay2.7にバージョンあげつつplugin.sbtとbuild.propertiesとbuild.sbtの見直しをしたのですがはまったのでメモ。
sbt clean buildするとエラーが
証明書エラー
[error] typesafe-ivy-releases: unable to get resource for org.scala-lang#scala-compiler;2.12.7: res=https://repo.typesafe.com/typesafe/ivy-releases/org.scala-lang/scala-compiler/2.12.7/jars/scala-compiler.jar: 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]
[error] at sbt.internal.librarymanagement.IvyActions$.resolveAndRetrieve(IvyActions.scala:332)
[error] at sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEither$1(IvyActions.scala:208)
[error] at sbt.internal.librarymanagement.IvyActions$$$Lambda$2622/739089070.apply(Unknown Source)
[error] at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withModule$1(Ivy.scala:239)
[error] at sbt.internal.librarymanagement.IvySbt$Module$$Lambda$2623/1544340778.apply(Unknown Source)
[error] at sbt.internal.librarymanagement.IvySbt.$anonfun$withIvy$1(Ivy.scala:204)
[error] at sbt.internal.librarymanagement.IvySbt$$Lambda$2624/233285125.apply(Unknown Source)
[error] at sbt.internal.librarymanagement.IvySbt.sbt$internal$librarymanagement$IvySbt$$action$1(Ivy.scala:70)
[error] at sbt.internal.librarymanagement.IvySbt$$anon$3.call(Ivy.scala:77)
証明書が古くなっているのが原因のようで、keytoolで証明書をimportするか
JDKのバージョンをあげるかすれば解決できます。私はJDKのバージョンをOpenJDK12にあげました。↓macでbrewを使っている場合
$ brew cask install java
SBTの構文エラー
error: `<<=` operator is removed. Use `key := { x.value }` or `key ~= (old => { newValue })`.
<<= を := に書き換えればなおります。
error while loading String, class file ‘/modules/java.base/java/lang/String.class’ is broken
error: error while loading String, class file '/modules/java.base/java/lang/String.class' is broken
(class java.lang.NullPointerException/null)
/Users/hoge/build.sbt:78: error: type mismatch;
found : sbt.Def.Initialize[sbt.Task[java.io.File]]
required: java.io.File
doc in Compile := target.map(_ / "none"),
これはdocがリリースに含まれないように書いてた部分の書き方が変わったようで、こんな感じになおしました。
// 古い書き方
doc in Compile <<= target.map(_ / "none")
// 新しい書き方
sources in (Compile, doc) := Seq.empty
publishArtifact in (Compile, packageDoc) := false