これ
をsbtで1つのrepositoryで実行するsampleを作った、というだけの話。
そもそもScalaでprotobufだとscalapbが完全にデファクトで、scalapbはかなり拡張性が高く色々とオプションが用意されてるため、普通に書く分には独自に拡張したいことはあまり多くありません。
それでも、一応なんとなく必要かもしれない場面が出てきて、興味本位で最低限のサンプルを作ったので貼っておきます。
一番のポイントは
「1つのrepositoryで」
と書いているように、通常は独自のoptionから生成されたJavaやScalaのコードは、compile済みでmaven centralなどにpublish済みだと、話が簡単というか単純なのですが、 内部だけで使うoptionをその場で定義したい場合、わざわざpublishしたりrepositoryを分けること自体が面倒だと思います。
しかし、sbt-protocの仕組みで、普通にprotoc pluginを書く(sbt pluginではなくprotoc plugin)場合、結局sbtのbuildファイルから呼び出すことになり、 番号などを決めうちで直でコード内部に書く(ある意味2重管理する)のでなければ、そのbuildファイルのレベルでのprotoc pluginを書く時点で独自optionから生成されたコードが参照出来ないといけないため、そのための工夫が若干面倒です。
色々方法があると思いますが、今回は雑にsymlink使って定義するようにしてみました。
そのためのコード生成として project/plugins.sbt
以外にも project/project/plugins.sbt
に設定が必要になる、というのもポイントです。