Grails 1.3 観察-もう更新!?-
JGGUGjapan grails/groovy user group
def speaker = new Cast(name:”T.Yamamoto”,version:”G*-2010-03-30”)
自 己 紹 介山本 剛仕事:テクニカルDTPアーキテクト
twitter: @tyamaはてな id: mottsniteブログも↑
JGGUG名古屋支部長「Grails徹底入門」共著 9~11を執筆
リリース履歴1.3 M1 - 3/11 1.3 RC1 - 3/24 → 3/末に変更。 1.3 リリースはいつ?
1.2.x系の立場は!?
更新内容Groovy 1.7 SupportJUnit 4Maven Repository SupportDeclarative Plugin DependenciesDirty Checking in GORMGORM Support For Derived PropertiesNamed Queries Support Additional CriteriaNew GSP Tag - join
Groovy 1.7.x
Groovy 1.7Grails-1.2.2 では、Groovy-1.6.8に更新Groovy 1.7 リリースノート
翻訳 by ksky http://d.hatena.ne.jp/ksky/20100121/p1
http://groovy.codehaus.org/Japanese+Groovy+1.7+release+notes
Groovy 1.7更新内容おさらい匿名内部クラスとネストクラスimport、package、変数宣言へのアノテーションのサポートASTビューア、ASTビルダGroovy Truthがカスタマイズ可能にboolean asBoolen()メソッド書き直されたGroovyScriptEngineGroovyConsole
匿名内部クラスとネストクラスstaticなネストクラス
匿名内部クラス
class A { static class B {}}new A.B()
boolean called = false Timer timer = new Timer()timer.schedule(new TimerTask() { void run() { called = true }}, 0) sleep 100assert called
import、package、変数宣言へのアノテーションのサポート
importに@Grabを付ける@Grab(group='net.sf.json-lib', module='json-lib', version='2.3', classifier='jdk15') import net.sf.json.groovy.*
変数宣言に@Grabを付ける@Grab('net.sf.json-lib:json-lib:2.3:jdk15') def builder = new net.sf.json.groovy.JsonGroovyBuilder()
パワーアサートassert new File('foo.bar') == new File('example.txt')
Caught: Assertion failed:
assert new File('foo.bar') == new File('example.txt') | | | foo.bar | example.txt false
GroovyConsole設定記憶別窓で開く
JUnit 4
JUnit 4テスト実行にJUnit4が採用されています。Grails 1.3以前のテストに関しても互換は保たれています。
JUnit 4http://ja.wikipedia.org/wiki/JUnit いろいろできます。
JUnit 4テストがこんな感じにかける。
import grails.test.*import org.junit.* //インポートしてね。// テストクラス名の最後はTestでもOK 。//以前はXxxxxTestsしか認識しなかった。class ItemTest extends GrailsUnitTestCase { @Before void initialize() { super.setUp() //これは必ず付けてね
println "initialize()" } @After void goodby() { super.tearDown() //これは必ず付けてね
println "goodby()" }
JUnit 4以前のJUnit3の状態も併用できる。
@Test //メソッドの前に testって書かなくて良い void プリフィックスいらないぉ() {
assertEquals 0,0 } //@Test無しでも、testで始まっていれば実行。 void test昔の書き方もOKでっせ() {
shouldFail{ asdsdagdrgasf } }
JUnit 4こんなのもできる。
@Ignore // JUnit4なので・・。 void スッキプするよ() {
assertEquals 0,0 } @Test(timeout=2000L) // JUnit4なので・・。 void タイムアウトさせる() {
Thread.sleep(3000) assertEquals 0,0 }}
JUnit 4GrailsUnitTestCaseが必要なければextendsしなくてもOK。その場合はちゃんとorg.junit.Assertをインポート。
import org.junit.*import static org.junit.Assert.*class SomeTest {
! //...省略...
}
Mavenリポジトリサポート
MavenリポジトリサポートMavenリポジトリへのプラグインの発行と読込に対応しました。
この実装は、 Mavenパブリッシャープラグインで対応しています。
GrailsとMavenの関係http://grails.org/doc/latest/guide/3.%20Configuration.html#3.7.7%20Maven%20Integration
実は以前からpom対応は存在しました。
たぶん使ってる人少ない?http://grails.org/Maven+Integration↑どうなったのやら。
grails.project.dependency.resolution = { ! pom true! ..}
Maven Publisherhttp://grails.org/plugin/maven-publisherGrailsプラグインをMavenリポジトリにデプロイすることができます。※通常のGrailsプロジェクトも可能。pom.xml も自動で生成してくれます。
%grails maven-install ! ローカルキャッシュにインストール%grails maven-deploy! リモートリポジトリにデプロイ
バージョン・グループ・アーティファクトの指定
*GrailsPlugin.groovy に記述する。(プラグインディスクリプタファイル)
ドキュメントでは、groupIdになっているが現状だとgroupが認識する。String group = 'jp.xmldo.grails'
グループ指定を省略すると、"org.grails.plugins"が代わりに使用される。バージョン指定は従来通りdef version = '0.1'
アーティファクト名はプラグインの名称が使用される
この場合は jp.xmldo.grails:example-wiki:0.1 となる。
grails maven-deployリポジトリを指定して実行
BuildConfig.groovy にリポジトリを設定
% grails maven-deploy --repository=myRepo
grails.project.dependency.distribution = { remoteRepository(id:"myRepo", url:"file://127.0.0.1/Users/tyama/myrepos/maven2/")}
または、grails.project.dependency.distribution = { remoteRepository(id:"myRepoScp", url:"scp://10.211.55.6/var/www/html/myrepo"){ authentication username:"tyama", privateKey:"${userHome}/.ssh/id_dsa" }}
プラグインの依存性管理BuildConfig.groovyにIvy DSLで記述することで、install-pluginを使用せずにプラグインを管理。
http://grails.org/doc/latest/guide/3.%20Configuration.html#3.7.9%20Plugin%20Dependencies
grails.project.dependency.resolution = { plugins { runtime 'jp.xmldo.grails:example-wiki:0.1' }}
依存プラグインの除外例)weceemプラグインが依存しているプラグインdef dependsOn = [ searchable:'0.5.4 > *', quartz:'0.4.1 > *', ]
例)excludesで除外して、バージョンを決め打ちで指定するplugins {! runtime( ':weceem:0.8' ) {! ! excludes "searchable"! }! runtime ':searchable:0.5.4'}
トランジティブを無効にするトランジティブ 解決すべき他の依存関係を持っているかどうか全ての依存解決を無効にする場合は、transitiveにfalseを指定。
plugins { runtime( ':weceem:0.8' ) { transitive = false } runtime ':searchable:0.5.4' }
ぷち、まとめチーム用GrailsプラグインリポジトリにMavenリポジトリを使用できる。Mavenリポジトリに対応した事によって公開しやすい。公式プラグインリポジトリの負荷軽減!?
ローカルivy2キャッシュに保持されるので、インストトールが早い。プラグインにグループ指定が可能なので、公式にアップされたプラグインの自分実装も管理しやすくなる。例 ’org.jggug:calendar:1.1.1‘
GORM関連
GORM関連GORMでのダーティーチェックGORM派生プロパティ対応ネームドクエリー対応に追加クライテリア
GORMでのダーティーチェックオブジェクトが変更されたかを確認するメソッド
フィールド毎の確認も可能
def item = Item.get(1)assert !item.isDirty() // ここではfalse
item.properties = paramsif (item.isDirty()) { //処理}
def item = Item.get(1)assert !item.isDirty() // ここではfalse
item.properties = paramsif (item.isDirty('name')) { //フィールドnameが変更されたときの処理}
GORM派生プロパティ対応GORM派生プロパティ対応
class Item { static mapping = { priceWithTax formula: 'price * 1.05' // 税込み価格 } String name Float price Float priceWithTax //...省略...
}
ネームドクエリー対応に追加クライテリアネームドクエリーを呼び出したときにクライテリアを追加できる
Grails-1.2での実装:よく使うクエリーに名前を付けて定義可能に。 static namedQueries = { shippedInThree { def now = new Date() lt 'shipped', now + 3 } }
呼び出し時に、ダイナミックファインダを使用可能。def list = Item.shippedInThree.list(max: 10, offset: 5)def list = Item.shippedInThree.count()def list = Item.shippedInThree.findAllByNameLike(’%自転車‘)
ネームドクエリー対応に追加クライテリア1.3での追加機能!クライテリアを記述可能
def list = Item.shippedInThree { and { lt 'price',20000F } }
その他
その他。joinタグ
本体のビルドをGradleに変更
GANTの更新 - 1.9.2へ更新インラインプラグインの処理
<g:join in="['Grails', 'Groovy', 'Gradle']" delimiter="_"/>
出力結果 Grails_Groovy_Gradle
% ./gradlew clean assemble
インライン・プラグインの処理インライン(インプレース)プラグイン1.2.xまでの実装では、package-pluginで生成されるplugin.xmlを参照してプラグインを認識する仕組み。
1.3からは、plugin.xmlが存在しなくても、インライン・プラグインを認識できるようになる。
|-- application.properties|-- grails-app|-- plugins| |-- exampleHongo ←プラグイン| | |--plugin.xml ← 1.2.x以前では、これが無いと注意される| |-- exampleShibuya ←プラグイン% grails run-app Welcome to Grails 1.2.1 - http://grails.org/ ..省略..
The inplace plugin at [/works/experiment/20100330/tokyo/plugins/exampleHongo] does not have a plugin.xml. Please run the package-plugin command inside the plugin directory.
まとめ主に1.2.x系の更新に対しての強化。 ・もっと依存性管理 ・GORMを強化Groovy-1.7.xに更新。 ・速度向上!JUnit 4 ・テスト能力向上!
もしも、動作がおかしくなったら
~/.ivy2を消す。
% rm -rf ~/.ivy2
告 知
見出しだけ日本語Grailsドキュメント公開
公式サイトhttp://grails.org/doc/latest
日本語 Japanese doc.http://grails.jp/doc/latest
ポール氏、来日
in 仙台
2010年4月24日(土) 14:00~17:30G*ワークショップ in 仙台
開催協力:東北デベ ロッパーズコミュニティ(TDC)
詳しくは http://www.jggug.org 参照
QCon Tokyo 20102010年4月19日(月)20日(火)
JGGUG代表 山田さんのセッション、GroovyコミッターのPaul Kingさんのセッション!
詳しくは http://qcontokyo.com
球根で
植えて花咲く
ぐれいるず
ここで一句
Recommended