Grails 3.1 リリース!!
Grails 3.1 リリースです。
Grails 3.1の内容
- Spring Boot 1.3 と Spring 4.2に更新!
- Grails 3 プロファイルサポートの改良。必要なシーンに合わせた独自のプロファイルを開発
- プロファイルをjarとして発行できmavenで配布可能
- create-profileコマンドで簡単プロファイル作成
- ビルドへの機能提供
- 多数のfeatureの作成
- 新たなRESTプロファイル("web-api"は"rest-api"に変更されました)
- JSON/Markupビュー
- RESTスカフォルド
- AngularJSプロファイル
- AngularJSを使用したSPA(シングルページアプリケーション)開発をサポート
- GORM 5 suite
- 従来のGORMをベースから再構築されたGORM5。今まで対応していたMongoDB,Hibernate(3,4,5),Cassandra,Redisに加えNeo4jにも対応。
- プラグイン発行Gradleプラグイン
詳しくは http://grails.github.io/grails-doc/3.1.x/guide/introduction.html#whatsNew31 から詳細を!
Grails 3.0からの更新注意点
http://grails.github.io/grails-doc/3.1.x/guide/upgrading.html#upgrading3x
- GORM 5への更新
GORM5では、Groovy traits等を使用して再構築されています。以前のGORMとはバイナリー互換がありません。
次のようなエラーが出る場合、使用しているプラグインで古いGORMを使用しているので、プラグイン側もGrails3.1とGORM5で再コンパイルが必要です。
Caused by: java.lang.ClassNotFoundException: org.grails.datastore.gorm.GormEntity$Trait$FieldHelper … 8 more
GORM5ではhibernateプラグインの名称がhibernate4となりました。(他のバージョンはそれぞれ、hibernate3とhibernate5)
build.gradleで指定しているプラグインを変更しましょう:
compile 'org.grails.plugins:hibernate4'
- 静的リソースパス
src/main/resources/publicに配置されていたリソースは既存値で、URI /static/** となります。元々は /** でした。
例えばGSPで以下を指定した場合。
${g.resource(dir:'files', file:'mydoc.pdf')}
/files/mydoc.pdf では無く、/static/files/mydoc.pdfとなります。
元の状態が良い場合はapplication.ymlに以下を設定しましょう!
grails: resources: pattern: '/**'
- フィルタープラグイン除去
Grails 3.0.xではフィルターの仕組みがInterceptorsに変更されましたが、内部的にプラグインを保持していました。 Grails 3.1.xからは無くなります。
フィルタープラグインが必要な場合は、以前のGrails 3.0.xで使用していたプラグインを依存管理から指定できます。
compile 'org.grails:grails-plugin-filters:3.0.12'
grails.transactional.TransactionalのAST変換でトランザクショナルサービスを提供しているため、従来の方法が必要なくなりました。
以下のように、transactionalで指定されている場合は、
class FooService { static transactional = true }
以下のようになります。
import grails.transaction.Transactional @Transactional class FooService { }
以前の状態に戻したい場合はapplication.ymlに以下を設定しましょう!
grails: spring: transactionManagement: proxies: true
- JSONコンバータの変更
The default JSON converter no longer includes the class property by default. This can be re-enable with the following configuration:
デフォルトJSONは、デフォルトでクラスのプロパティを含まないようになりました。元の状態で使用したい場合はapplication.ymlに以下を設定しましょう
grails: converters: domain: include: class: true
※デフォルトのJSONコンバータはidのプロパティがnullの場合idをレンダリングしません。
- JSON Builder Groovy Alignment
grails.web.JSONBuilderは、GroovyのJSONビルダーgroovy.json.StreamingJsonBuilderへ変更になり非推奨となりました。
例えば以下のようにJSONをビルドするrenderブロックは、groovy.json.StreamingJsonBuilderのシンタックスに書き直す必要があります。
render(contentType:"application/json") { title = "The Stand" }
書き直すと、
render(contentType:"application/json") { title "The Stand" }
今回非推奨となった、以前のJSONBuilderに戻す場合は、application.ymlに以下を設定しましょう。
grails: json: legacy: builder: true
JSONビューが追加されたので、以前のJSONコンバータAPIを使用した実装はビューに置き換えることを推奨しています。
将来的にコンバータは外部プラグインとして切り離されます。JSONコンバータAPIはdeprecatedになりませんが、新たに追加されたJSONビューを使用した方が、機能的でエレガントなAPIが構築出来ます。
- Spring Boot 1.3 と Spring 4.2
Grails 3.1 は、Spring Boot 1.3 と Spring 4.2に変更されているため、それに関連する外部ライブラリなどの更新は必要です。
Spring Boot 1.2と違い、Spring Boot 1.3では、Gradleアプリケーションプラグインを使用していません。もし使用している場合は変更が必要です。
そして、Spring Boot 1.3は、デフォルトでSpring Security 4.xを参照しています。プロジェクトがSpring Security 3.xに依存している場合は、以下の例のように、ライブラリの依存設定が必要です。
compile 'org.springframework.security:spring-security-core:3.2.9.RELEASE' compile 'org.springframework.security:spring-security-web:3.2.9.RELEASE'
Grails 3.0.xでのResourceアノテーションが適用された、ドメインクラスのリソースはXMLでした。Grails 3.1.x移行はJSONがデフォルトとなります。
もしXMLレスポンスを使用する可能性が明日場合は、以下の様に指定しましょう。
import grails.rest.* @Resource(formats=['xml', 'json']) class MyDomainClass {}
GebでHTMLUnitを使用している場合(※通常推奨されないしPhantomJSを使用した方が良い)は、ライブラリの依存管理の調整が必要です。
testRuntime 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1' testRuntime 'net.sourceforge.htmlunit:htmlunit:2.18'
Grails 3.1.0 の公式リリースノートはこちら。
https://github.com/grails/grails-core/releases/tag/v3.1.0
https://github.com/grails/grails-core/issues?q=milestone%3Agrails-3.1.0.GA
コミットリスト https://github.com/grails/grails-core/compare/v3.1.0.M3...v3.1.0?w=1
ダウンロード https://github.com/grails/grails-core/releases/download/v3.1.0/grails-3.1.0.zip
ドキュメント http://grails.github.io/grails-doc/3.1.0/
追記です!
Grails 3.0.13リリース情報
もろもろバグフィックスと!
- スタートアップ速度向上
Grails 3.0.12から起動速度が向上しました。
簡単にまとめるとGrailsクラスのスキャン範囲を限定したっぽい。今後はApplicationクラスに関連したクラスだけをスキャンするようになりました。以前の状態に戻したい場合は、ApplicationのlimitScanningToApplicationをオーバライドしてfalseを返しましょう。
@Override protected boolean limitScanningToApplication() { return false }
- 静的リソースの場所
https://github.com/grails/grails-core/issues/9430 の問題を解決するために、src/main/resources/publicに配置されていたリソースは既存値で、URI /static/** となります。元々は /** でした。
元の状態が良い場合は以下を設定しましょう!
grails.resources.pattern = '/**'
公式リリースノート https://github.com/grails/grails-core/releases/tag/v3.0.13
https://github.com/grails/grails-core/issues?q=milestone%3Agrails-3.0.13
コミットリスト https://github.com/grails/grails-core/compare/v3.0.12...v3.0.13?w=1
ダウンロード https://github.com/grails/grails-core/releases/download/v3.0.13/grails-3.0.13.zip
ドキュメント http://grails.github.io/grails-doc/3.0.x/