ごうれむてっく

ボクわるいゴーレムじゃないよ

自作ライブラリーで sbt dist すると Not a valid command と言わる

Play Framework のプロジェクトで機能を外部ライブラリーとして切り出したいが、jarの生成でつまずいて死んだ話。

環境

何が起きたか

xerial.org

このブログを流し読みして、 sbt publish-local とか sbt package-dist とかのコマンドがあることがわかったので、Play Framework でも使用している sbt dist も含めてどんな違いがあるのか比較・検討しようとしていました

新規プロジェクトを作成後、まずは慣れ親しんだ sbt dist を実行してみることに

sbt:hello> dist
[error] Not a valid command: dist (similar: set, iflast, last)
[error] Not a valid project ID: dist
[error] Expected ':'
[error] Not a valid key: dist (similar: bgList, test, history)
[error] dist
[error]     ^
sbt:hello> 

( ゚д゚)…?

...ブログでも紹介されているこっちはどうだ?

sbt:hello> package-dist
[error] Not a valid command: package-dist
[error] Not a valid project ID: package-dist
[error] Expected ':'
[error] Not a valid key: package-dist (similar: package, packagedArtifact, packageBin)
[error] package-dist
[error]             ^

は?

Playでも使っているコマンドが動かないなんて...

解決

stackoverflow.com

困ったときのStackoverflowですよ

there is no dist task in bare-bone SBT. So it just tells you it can't find such a task. Probably you meant to use some SBT plugin which defines the dist task? There is a publish task in the SBT, probably you are looking for it. – Alexander Arendar Dec 13 '17 at 16:45

distなんてタスク、生のSBTプロジェクトには存在しねえよ。publish タスク使え。ってことみたいです

余談ですが、最初に参考にしたブログでも、ちゃんと読んだらpackage-distタスクの設定をきちんとしていました