• 作成:
  • 更新:

ScalaとJavaを併用しているプロジェクトでsbt-java-formatterを使う

sbtで使えるJavaソースフォーマッタとしてsbt/sbt-java-formatter: An sbt plugin for formating Java codeがあります.

これの最新版0.5.0(0.3.0だとタスクが増えなかった…)を使っても,Javaソースが整形されなかったので首を捻りましたが,どうもこれが対象とするJavaソースはjavaSourceの場所を参考にしているようですね.

https://github.com/sbt/sbt-java-formatter/blob/48bb4c45d7b71a128652315d8f15b6ec9117510c/plugin/src/main/scala/com/lightbend/sbt/JavaFormatterPlugin.scala読んでて気が付きました.

このプロジェクトではJavaソースに途中からScalaをぶちこむために,scalaディレクトリにJavaソースを入れているので何も発動しないわけですね.

うーん…別の場所を探させる方法は…ないみたいですね.

javaSource使わないし

javaSource := scalaSource

で良いのでは?

型が違うらしい.

色々試して諦めようかと思いましたが,よく考えてみるとscalaディレクトリにJavaソースが置かれるとも限らないと思い直して,トップレベルの全てのソースディレクトリを探索対象に変更しました.

javaSource in Compile := baseDirectory.value / "src"
javaSource in Test := baseDirectory.value / "src"

javaディレクトリも使ってるプロジェクトだと副作用が発生しそうですがまあ今回は良いでしょう.

案の定副作用が発生しました

これを書いているとScalaTestなどtest限定の依存関係をtestプロジェクトで解決できないようです.

javaSource in Compile := baseDirectory.value / "src/main"
javaSource in Test := baseDirectory.value / "src/test"

なら問題ないらしいですね.