gpt4 book ai didi

grails - Groovy AST 转换不会在 Grails 编译期间应用,仅在自动重新加载期间应用

转载 作者:行者123 更新时间:2023-12-04 05:36:23 24 4
gpt4 key购买 nike

我编写了一个 Groovy AST 转换,它只在 Grails 自动重新加载要应用的类时为我运行。如果我清理项目并使用 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。

最佳答案

各种src/groovy , src/javagrails-app/*文件一次性编译在一起,因此编译器在编译域类时无法使用 AST 转换。然而,插件在应用程序之前单独编译,因此一个选择可能是创建一个非常简单的插件来包含注释和 AST 转换类,并在 BuildConfig 中将其声明为内联插件。

grails.plugin.location.'secured-objects' = '../secured-objects'

然后,转换将在插件编译过程中构建,并在构建域时位于编译器类路径中。

关于grails - Groovy AST 转换不会在 Grails 编译期间应用,仅在自动重新加载期间应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com