適用されるクラスをGrailsが自動リロードした場合にのみ実行されるGroovyASTトランスフォーメーションを作成しました。プロジェクトをクリーンアップし、run-appを使用してアプリケーションを起動すると、AST変換が実行されません。grailsが自動リロードするようにクラスに触れると、変換が実行されます。
アノテーションとASTTransformationの実装は、Grailsアプリケーションのsrc/groovyディレクトリにあるgroovyクラスです。アノテーションは、ドメインディレクトリのgroovyで記述されたドメインクラスで使用されます。
これは、Groovyファイルがコンパイルされる順序、またはクラスローダーによってロードされるときに発生する可能性がありますか?もしそうなら、どうすれば私のastトランスフォーメーションがドメインクラスの前にコンパイル/ロードされることを確認できますか?
注釈:
@Target([ElementType.TYPE])
@Retention(RetentionPolicy.RUNTIME)
@GroovyASTTransformationClass(["com.abc.annotation.SecuredObjectASTTransformation"])
public @interface SecuredObject {
}
ASTTransforamtionの実装:
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
class SecuredObjectASTTransformation implements ASTTransformation {
@Override
public void visit(ASTNode[] nodes, SourceUnit sourceUnit) {
// add some new properties...
}
}
Grailsのバージョンは2.1.0です。