rebar3を使ってerlangアプリの依存するパッケージを管理できます
rebar3 version
rebar 3.4.7 on Erlang/OTP 20 Erts 9.2
取り込むパッケージを記録
{deps, [
{cowboy, "1.0.1"}, % package
{cowboy, {git, "git://github.com/ninenines/cowboy.git", {tag, "1.0.1"}}} % alternatively, source
]
}.
以上のように使用するパッケージ(cowboy)をタグ指定で設定できました。
他にもbranch指定とgitのhash指定でパッケージ設定ができます。詳しくはドキュメントを参照してください
パッケージの初回更新
rebar3 update
でローカルにインデックスファイルが作成されます
rebar3 upgrade
依存するパッケージをダウンロードする及びロックファイルrebar.lockを作成します
以降たとえrebar.configにある依存するパッケージを変更してもrebar.lockファイルがいる限りrebar3が取ってくれない
パッケージの二回以降の更新
公式ページによるとrebar3 upgrade
コマンドがrebar.lockファイルがあってもいい感じに更新してくれますが、うまくいかなかった、、
自分が使う方法:
- rebar.lockファイルを削除してから依存パッケージを更新する
- rebar3 unlock
を実行してから更新する
ちなみにプロファイルを使ってのupgrade、例えばrebar3 as dev upgrade
がうまくいかない時があります、プロファイルを外しての更新が無難かな
さらに
例えばこういう依存関係があり:
module_foo->msgpack:0.3.2
module_bar->msgpack:0.3.2
そのあと
module_bar->msgpack:0.7.0
module_barが依存するmsgpackのバージョンを0.7.0にあげてもrebar3 upgrade
ではmsgpackのバージョンをあげない
さらに、rebar3 unlock module_foo
した上で、rebar.cofigファイルからmodule_fooを削除し、rebar3 upgrade
しても、msgpackのバージョンが上がらない。一回rebar3 unlock msgpack
してからupgradeしないとパッケージが更新されない