依存関係でcomposerのインストールがうまく行かなかった場合の対処法
こんばんは、最近またSymfony2やcomposerに触れる機会が増えてきた僕です。
さて、今日はcomposerでinstallやupdateしたら、ライブラリがメンテされてなくて依存関係でインストール出来なかった時の対処法をお教えします。
phpforce/salesforce-bundle
をインストールしようとしたら、composerでこけたんですね。
原因としては、phpforce/salesforce-bundle
のcomposer.jsonの中で、phpforce/soap-client
を指定してたんですが、そのphpforce/soap-client
のcomposer.jsonで指定してたdoctrine/common
の値が「2.3@stable」になってたからぽいです。
さらに、phpforce/soap-client
のcomposer.jsonでphpforce/common
が指定されているんですが、そのphpforce/common
のcomposer.jsonで symfony/event-dispatcher: >=2.1@stable
指定されているからもう。。。。。
で、Symfony2.4 or 2.3の環境でインストールしようとするとエラーになりますね。つまりSymfony2.1じゃないとだめぽみたいな。。。
「satisfiable by phpforce/soap-client」みたいなメッセージが・・・
まあ今回みたいな事って大composeer時代となったら、多々あると思います。
で、今回の場合はどうしたのかってことですが、まあpull requestは送るのは当然だと思いますが、とりあず動かすために、ひたすら問題のあるライブラリをフォークして、直すってことをしました。
さらにこちらで使用するcomposer.jsonのrepositoriesで、forkしたgithubのリポジトリを指定するようなアプローチを行いました。
フォークしたライブラリ
https://github.com/polidog/common/tree/composer_edit
https://github.com/polidog/soap-client/tree/composer
フォークした二つのライブラリはcomposer.jsonの中身を変更しています。
フォークしたライブラリを利用するcomoposer.jsonの書き方
ポイントとしては2つあります。
1つ目は、repositoriesの部分ですね。
ここにフォークしたgithubのurlを貼付けましょう。
|
|
2つ目は、通常であればrequireのしていには「”phpforce/salesforce-bundle”: “dev-master”」だけ記載すればいいのですが、forkしたphpforce/commonとphpforce/soap-clientを指定します。
|
|
全体としては、こんな感じっす。
|
|
最後に
修正した箇所を、pull requestを送ったらちゃんとマージされてました!
https://github.com/phpforce/soap-client/pull/8
https://github.com/phpforce/common/pull/1
なので、今からphpforce/salesforce-bundleをSymfony2.4でインストールするならcomposer.jsonのrequireはphpforce/salesforce-bundleだけで大丈夫です。さらにrepositoriesの記述もいらないです。
以下のようにcomposer.json書けばいいと思います。
|
|
最後の最後に、、、
業務中にpull request送ってごめんなさい・・・だってライブラリ1から作るのめんどくさいし工数掛かっちゃうんだもん・・・(´・ω・`)