Dón*_*yle 6 grails groovy abstract-syntax-tree grails-2.1
我编写了一个Groovy AST Transformation,当Grails自动重新加载要应用的类时,它只为我运行.如果我清理项目并使用run-app启动应用程序,则AST转换不会运行.触摸该类以便grails自动重新加载会导致转换运行.
注释和ASTTransformation实现是位于Grails应用程序的src/groovy目录中的groovy类.注释用于域类,在域目录中以groovy编写.
是否可能这是由groovy文件编译的顺序或类加载器加载它们的顺序引起的?如果是这样,我如何确保在域类之前编译/加载我的ast transforamtion?
注释:
@Target([ElementType.TYPE])
@Retention(RetentionPolicy.RUNTIME)
@GroovyASTTransformationClass(["com.abc.annotation.SecuredObjectASTTransformation"])
public @interface SecuredObject {
}
Run Code Online (Sandbox Code Playgroud)
ASTTransforamtion实现:
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
class SecuredObjectASTTransformation implements ASTTransformation {
@Override
public void visit(ASTNode[] nodes, SourceUnit sourceUnit) {
// add some new properties...
}
}
Run Code Online (Sandbox Code Playgroud)
Grails版本是2.1.0.
小智 3
AST 转换需要在项目代码之前编译。最简单的方法是使用脚本挂钩 grails 编译事件。查看这篇博客文章,了解如何使用新的 ant 任务创建脚本来预编译 src/ast 文件夹中的源代码。 http://reinhard-seiler.blogspot.com.au/2011/09/grails-with-ats-transformation-tutorial.html
如果您只有几个 AST 转换,那么这是迄今为止最好的方法。使用已编译的 jar 创建插件或单独的项目对于我的需求来说工作量太大。
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |