IntelliJ に package prefix を省略してくれるPluginが追加されていた。
JetBrainsのブログ
試したいことがあり、新しく Scala のプロジェクトを作成しようとしたら、見慣れないものが追加されていた。
以前からあったものを見落としていたのかと思ったが、どうも一番上に載せた記事をみると、最近追加されたようだ。
プロジェクトを作成してみると、plugins.sbt となんだか見慣れない下記のプラグインが追加されていた。
addSbtPlugin("org.jetbrains" % "sbt-ide-settings" % "1.1.0")
build.sbt には下記が追加されていた。
idePackagePrefix := Some("dev.tchiba")
プロジェクトのパネルを見てみると、build.sbt で設定したpackage prefixが表示されている。(build.sbtで idePackagePrefix := Some("dev.tchiba.domain")
に書き換えてる)
IDEでの表示を短くしてくれるのかな?と思った(通常は dev.tchiba.domain.model
のようにルートディレクトリがなる。すごい見づらい)が、ディレクトリの構造を見てみると違うようだ。
$ tree . ├── main │ └── scala │ └── models │ ├── circle │ │ ├── Circle.scala │ │ ├── CircleFactory.scala │ │ ├── CircleId.scala │ │ ├── CircleName.scala │ │ └── CircleRepository.scala │ └── user │ ├── User.scala │ ├── UserFactory.scala │ ├── UserId.scala │ ├── UserName.scala │ ├── UserRepository.scala │ └── UserType.scala └── test └── scala 7 directories, 11 files
見た目だけが違う訳ではないらしい。scala配下に dev.tchiba.domain
pacakgeは見当たらず。最初から models
がある。おそらくコンパイルしたものに含まれるのだろうと思い target
の方を見にいくことにした。
scala-2.13 ├── classes │ └── dev │ └── tchiba │ └── domain │ └── models │ ├── circle │ │ ├── Circle$.class │ │ ├── Circle.class │ │ ├── CircleFactory.class │ │ ├── CircleId$.class │ │ ├── CircleId.class │ │ ├── CircleName$.class │ │ ├── CircleName.class │ │ └── CircleRepository.class │ └── user │ ├── Normal$.class │ ├── Normal.class │ ├── Premium$.class │ ├── Premium.class │ ├── User$.class │ ├── User.class │ ├── UserFactory.class │ ├── UserId$.class │ ├── UserId.class │ ├── UserName$.class │ ├── UserName.class │ ├── UserRepository.class │ └── UserType.class ├── update │ └── update_cache_2.13 │ ├── inputs │ └── output └── zinc └── inc_compile_2.13.zip 10 directories, 24 files
予想通り、成果物の方は dev.tchiba.domain
が追加されていた。このプラグインは実装時はpakcage prefixを省略し、コンパイル時はpackage prefix を追加してくれる仕組みのようだ。