Grails 1.3 マイルストーン 1 リリース! サイクルみじかっ!
1.2.x系が最近リリースされたばかりですが、予定通りいけば今月末に最終リリース予定のGrails 1.3系の最初のマイルストーンがリリースされました。
リリースノートの内容を意訳しました。
http://www.grails.org/1.3-M1+Release+Notes
詳細は以下を参照!
- Changelog http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11063&version=15400
- ダウンロード http://grails.org/Download
- ドキュメント http://grails.org/doc/1.3.x
Groovy 1.7 に更新!
Grails 1.3 M1ではGroovy 1.7に更新されています。Groovy 1.7では、匿名クラスネステッド(入れ子)クラスの対応、パワーアサート等の実装が追加されています。詳しくは、Groovy 1.7のリリースノートを参照してください。
JUnit 4
Grails 1.3からテスト実行にJUnit4が採用されています。
Grails 1.3以前のバージョンのテストに関しても互換は保たれています。
Mavenリポジトリ対応
Mavenリポジトリへのプラグインの発行と読込に対応しました。この実装は、Mavenパブリッシャープラグインhttp://grails.org/plugin/maven-publisherで対応しています。
Grails 1.2で実装されたBuildConfig.groovyに記述する Ivy DSL を利用して、簡単にプラグインリポジトリ設定を追加できます。
repositories {
mavenRepo "http://repository.codehaus.org"
}
Grailsセントラルリポジトリhttp://grails.org/plugin/homeの有効無効をgrailsCentralで簡単に定義できます。
repositories { grailsCentral() }
プラグイン依存性宣言
新規に追加されたMavenリポジトリ対応はでは、プラグインの依存関係もIvy DSLで宣言できます。
plugins {
runtime ':hibernate:1.2.1'
}
plugins { runtime( ':weceem:0.8' ) { excludes "searchable" } }
プラグインのスコープも可能。
plugins {
build( ':weceem:0.8' )
}
GORMでのダーティーチェック
オブジェクトが変更されたかを確認する新しいメソッドが追加されました。
def airport = Airport.get(10) assert !airport.isDirty() airport.properties = params if (airport.isDirty()) { on changed state } // do something based
フィールド毎の確認も可能です。
def airport = Airport.get(10) assert !airport.isDirty() airport.properties = params if (airport.isDirty('name')) { // フィールドnameが変更されたときの処理 }
GORM派生プロパティ対応
class Product { Float price Float finalPrice static mapping = { finalPrice formula: 'PRICE * 1.155' } }
ネームドクエリー対応に追加クライテリア
class Publication { String title String author Date datePublished Integer numberOfPages static namedQueries = { recentPublications { def now = new Date() gt 'datePublished', now - 365 } } } def books = Publication.recentPublications { or { like 'author', 'Tony%' like 'author', 'Phil%' } }
GSP joinタグ
<g:join in="['Grails', 'Groovy', 'Gradle']" delimiter="_"/>
以下が生成されます:
Grails_Groovy_Gradle
他にも、Changelog http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11063&version=15400を見るといろいろと更新がされていたりします。じっくり読んでみるのも良いかもですね。
まだ検証していないですが、個人的に興味深い物を一部紹介すると、
- ドメインクラスの永続化を無効化する http://jira.codehaus.org/browse/GRAILS-2515
- GORMダイナミックファインダ、And式の無制限対応 「例」Book.findByAuthorAndTitleAndPublished(a, t, true)
3月30日(火)に行われる「第8回 G* ワークショップ」で、Grails 1.3を紹介させていただきます。
お時間がある方は是非ご参加ください!
日時: 2010年3月30日(火) 19:00〜21:00 頃 (18:30受付開始)
場所: IBM渋谷オフィス
東京渋谷区道玄坂一丁目12-1 マークシティウェスト18階
http://www-06.ibm.com/software/jp/swcoc/guide/tokyo/access.html
詳しくは以下のページを参照ください。
http://www.jggug.org/news/dai8kaiwakushoppu
Grails 1.3 M1を試す際の注意点
acegiプラグインでもなのですが、コマンドを追加するプラグインが一部動作しません。
調べないと何とも言えませんが(少なくとも1.2.1では問題無かった)。コマンド用GANTスクリプトの仕様変更なのか、それともGANTの更新に伴う変更なのか・・。
これを一時的に解決する方補は、対象のGANTスクリプトの最後に以下の行を追加すると動きます。
setDefaultTarget('default')
つまりデフォルトのタスクを指定してやらないと動きません。
プラグインはUSER_HOME/.grails/ 以下の階層にあるのですが、そちらを編集するよりはプラグインフォルダをプロジェクトディレクトリに持ってきた方が変更しやすいです。
grails-app/conf/BuildConfig.groovyに以下を追記するとプロジェクトディレクトリの直下にpluginsフォルダが作成されて、その中にプラグインが保持されるようになります。
grails.project.plugins.dir="plugins"