Grailsプラグイン + Mavenをローカルリポジトリでの注意点とかメモ
結論が出てるのか出てないのか、自分でもわからなくなってきたぞ!
って事で自分なりの結論を先に書く。
あとはグダグダなメモなのでツッコミは無しで・・・。
結論+わかった事
- ローカルリポジトリにあるプラグインと依存関係があるプラグインは、設定しなくてもコンパイルが通ってしまうが、mavenLocal()は必要。
- ローカルリポジトリに置いておく依存参照されるプラグインのgroupIdは'org.grails.plugins'に設定しないとダメみたい!
- このあたりの検証は疲れる。
もう一回いっておく。ダグダなメモなのでツッコミは無しで・・・。
験用アプリ、プラグインを作成
mainapp - プラグインを使用するGrailsアプリ
myplugin-one - 適当なプラグイン1
myplugin-two - 適当なプラグイン2
myplugin-depends - プラグイン1,2が参照するプラグイン
つまり以下の関係になる。
mainapp |-myplugin-one --dependsOn-- myplugin-depends |-myplugin-two --dependsOn-- myplugin-depends
myplugin-dependsを作成。maven-publisherプラグインをインストール。
grails install-plugin maven-publisher
グループ定義を追加。
class MypluginDependsGrailsPlugin { def group = 'jp.xmldo.grails' ..省略.. }
myplugin-dependsをmaven-installしてローカルリポジトリに追加。
grails maven-install
適当なドメインクラスMessageをmyplugin-dependsに生成。
grails create-domain-class Message
そのドメインクラスを継承するドメインクラスを、myplugin-one、myplugin-twoに作成して、それぞれmyplugin-one、myplugin-twoプラグインにdependsOn、loadAfterを定義する。
def dependsOn = ['myplugin-depends':'0.1'] def loadAfter = ['myplugin-depends']
myplugin-oneをgrails compileする。もちろん、この時点では、ドメインクラスMessageが無いのでコンパイルエラー
BuildConfig.groovyに依存定義をする。
plugins { runtime 'jp.xmldo.grails:myplugin-depends:0.1' }
この時点では、mavenLocal()は参照させていない。
もう一度コンパイル。
依存プラグインがインストールされて、コンパイルOK。
しかし、grails cleanして、もう一度コンパイル。するとエラー。
よく見ると、myplugin-dependsにドメインクラスを追加した後にバージョンを上げていなかったから、内容が更新されていない。
つまり、当たり前の動作で、
なので、バージョンを調整して再度実行。
grails clean grails compile
問題無くコンパイルOK
この時点では、mavenLocal()は参照させていない。
コンパイルもできたので、myplugin-oneをmaven-installする。
そして、mainappで読みこんでみる。
plugins { runtime 'jp.xmldo.grails:myplugin-one:0.1' }
- mavenLocal()設定無し。=> もちろん失敗。
- mavenLocal()を設定する。 => myplugin-dependsが見つからないよ!と言われる。
:::::::::::::::::::::::::::::::::::::::::::::: :: UNRESOLVED DEPENDENCIES :: :::::::::::::::::::::::::::::::::::::::::::::: :: org.grails.plugins#myplugin-depends;0.2: not found ::::::::::::::::::::::::::::::::::::::::::::::
ここで言いたいのは、さっきmyplugin-oneをmaven-installしたときは問題無くコンパイルとインストールが行われたじゃないか!で、何で見つからないとか言うのだよ!
気を取り直して、myplugin-oneに戻る。
myplugin-oneのBuildConfig.groovyにmavenLocal()を設定する。そしてmyplugin-oneバージョンも更新。
- BuildConfig.groovyにmavenLocal()を設定
- プラグインディスクリプタでプラグインのバージョンを変更
- 再度grails maven-install
- mainappのプラグイン参照設定もバージョン変更
- mainappのコンパイル実行
まだ、UNRESOLVED DEPENDENCIES、org.grails.plugins#myplugin-depends;0.2: not found
そもそも、groupIdはorg.grails.pluginsでなくて、jp.xmldo.grailsだよ!
なので最終的に。myplugin-dependsのgroupIdをorg.grails.pluginsに変更してやる!
- myplugin-dependsのgroupIdをorg.grails.pluginsに変更
- myplugin-dependsをmaven-installする。=> これで 'org.grails.plugins:myplugin-depends:0.2'という別物が完成。
- myplugin-oneの参照している箇所も変更。バージョンも更新。'jp.xmldo.grails:myplugin-one:0.3'に更新
- mainappのBuildConfig.groovy内も変更。
いざ!コンパイル実行!
- 1回のコンパイル => エラー => 原因'jp.xmldo.grails:myplugin-one:0.3'を最初に入れたときの依存に問題。この時のBuildConfigは読んでいない?但しdependsOnを認識している。
- 2回目クリーンしてコンパイル。=> この時の状況。myplugin-oneはインストールされている。
コンパイル成功!