[Grails] プラグインの基本的な使い方

## 資料
本家ドキュメントはhttp://grails.org/doc/latest/guide/conf.html#dependencyResolution
日本語ドキュメントはhttp://grails.jp/doc/latest/guide/conf.html#dependencyResolution

## インストール方法

`grails-app/conf/BuildConfig.groovy` 内の **plugins** に欲しいプラグインを追記します。
今回は、[Spring Security Core Plugin](http://grails.org/plugin/spring-security-core)の2013年10月23日時点で最新のものをインストールしました。

```groovy:grails-app/conf/BuildConfig.groovy
plugins {
    ...
    compile ":spring-security-core:2.0-RC2"    // 追記
}
```

これで `grails`コマンドでインタラクティブモードを起動すれば必要な物のダウンロード、クラスパスの設定など全て自動で行われます。

Grailsの公式で配布されているプラグインは以下から検索できます。
どういった形式で **plugins** に追記すれば良いのかも書かれていてとても親切です。
http://grails.org/plugins/?filter=all

以下のコマンドでもプラグインのインストールが出来ますが、少なくともGrails2.2.3の時点では、 **既に非推奨** となっています。

```
grails install-plugin spring-security-core
```




## アンインストール方法
プラグインのアンインストールは、以下の手順を踏みます。

1. `BuildConfig.groovy`のアンインストールしたいプラグインの記述をコメントアウトか削除。
1. コマンド `grails uninstall plugin [プラグイン名]`を実行。

注意点としては、Grailsのインタラクティブモードではプラグインのアンインストールは出来ないという点です。

```groovy:grails-app/conf/BuildConfig.groovy
plugins {
    ...
    //compile ":spring-security-core:2.0-RC2"
}
```

```groovy
grails> uninstall-plugin spring-security-core
| Error You cannot uninstall a plugin in interactive mode.
grails> exit
| Goodbye
[c:grailssamples]
$ grails uninstall-plugin spring-security-core
| Uninstalled plugin [spring-security-core]
```

## エラー発生！
今回 `compile ":spring-security-core:2.0-RC2"` を **plugins** に指定した際に下記のエラーが表示されました。

```
| Error Failed to resolve dependencies (Set log level to 'warn' in BuildConfig.groovy for more information):

- org.springframework.security:spring-security-core:3.2.0.RC1
- org.springframework.security:spring-security-web:3.2.0.RC1
```

これは単純に 

* org.springframework.security:spring-security-core:3.2.0.RC1
* org.springframework.security:spring-security-web:3.2.0.RC1
 
の2つがリポジトリから見つけられないよ、という意味です。
そこで、[Spring Security Core Plugin](http://grails.org/plugin/spring-security-core)の **Custom repositories** にあるとおり、`mavenRepo "http://repo.spring.io/milestone/"`を `BuildConfig.groovy`の **repositories** に追記します。

```groovy:grails-app/conf/BuildConfig.groovy
repositories {
    ...
    mavenRepo 'http://repo.spring.io/milestone'
}
```

で、再度 `grails`コマンドでインタラクティブモードを起動すると、今度はちゃんと最後まで実行されました。

こんな感じでログが流れます。

```
| Loading Grails 2.2.3
| Configuring classpath
| Downloading: spring-security-core-3.2.0.RC1.pom
| Downloading: spring-security-core-3.2.0.RC1.pom.sha1
| Downloading: spring-security-web-3.2.0.RC1.pom
| Downloading: spring-security-web-3.2.0.RC1.pom.sha1
| Downloading: spring-security-core-3.2.0.RC1.jar
| Downloading: spring-security-core-3.2.0.RC1.jar.sha1
| Downloading: spring-security-web-3.2.0.RC1.jar
| Downloading: spring-security-web-3.2.0.RC1.jar.sha1
| Downloading: spring-security-web-3.2.0.RC1.jar.sha1.
| Environment set to development
| Environment set to development.
| Environment set to development..
| Environment set to development...
| Environment set to development....
| Environment set to development.....
````

## プラグインの一覧
以下のコマンドで、Grailsの公式リポジトリで公開中のプラグインの一覧と、インストール済みのプラグインの一覧が表示できます。

`grails list-plugin`

実行結果は以下

```
grails> list-plugin
| Environment set to development.....

Plugins available in the grailsCentral repository are listed below:
-------------------------------------------------------------
DjangoTemplates Plugin<>               --
None                <>               --
acegi               <0.5.3.2>        --  Acegi Plugin
activemq            <0.4.1>          --  Grails ActiveMQ Plugin

... すごく長いので省略 ...

zoo-keeper          <0.1>            --  Grails ZooKeeper Helper


Plug-ins you currently have installed are listed below:
-------------------------------------------------------------
cache               1.0.1            --  Cache Plugin
database-migration  1.3.2            --  Grails Database Migration Plugin
hibernate           2.2.3            --  Hibernate for Grails
jquery              1.8.3            --  JQuery for Grails
resources           1.2              --  Resources
tomcat              2.2.3            --  Apache Tomcat plugin for Grails
webxml              1.4.1            --  WebXmlConfig

```

最後に表示されるインストール済みプラグインの一覧は、アンインストールしたプラグインも表示されてしまうことがあります。
`run-app`でアプリケーションを起動すると、ちゃんと上記のインストール済みプラグインの一覧から消えることを確認しました。

## その他
プラグインのインストールには、`grials`コマンドを実行する必要がありますが、開発環境でIntelliJを使っている場合は、 `Buildconfig.groovy` を編集した時点でエディタ上部に **Apply Grails changes to IDEA project structure**というリンクが出てくるので、それをクリックすれば同じようにプラグインがダウンロード、設定されます。