我写了一个Groovy AST变换,它只在Grails自动重新加载要应用的类时为我运行。如果我清理项目并使用运行应用程序启动应用程序,则 AST 转换不会运行。触摸类以便圣杯自动重新加载会导致转换运行。
注释和ASTTransformation实现是groovy类,位于Grails应用程序的src/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。
此外,如果你想避免注释并将其应用到每一个可能的类中,你可以在这里查看我的答案!
答案描述了如何应用Global ASTTransform。您可以在Transform之后编译的所有类中应用转换。
AST转换需要在项目代码之前编译。最简单的方法是用脚本挂钩grails编译事件。查看这篇博文,了解如何创建一个带有新ant任务的脚本来预编译src/ast文件夹中的源代码。http://reinhard-se iler . blogspot . com . au/2011/09/grails-with-ATS-transformation-tutorial . html
如果您只有一些AST转换,那么这是目前最好的方法。用编译好的jar创建一个插件或单独的项目对我来说太麻烦了。
所有各种 src/groovy
、src/java
和圣杯应用/*
文件都一次性编译在一起,因此 AST 转换在编译域类时对编译器不可用。但是,插件在应用程序之前的单独传递中编译,因此一种选择可能是创建一个非常简单的插件,只是为了包含注释和AST转换类,并在BuildConfig
中将其声明为内联插件
grails.plugin.location.'secured-objects' = '../secured-objects'
然后,转换将在插件编译传递中构建,并在构建域时位于编译器类路径上。
我在我的反应项目中得到了这些警告:(文件夹中的包是最新的。) 如何解决这些警告? /src/index.css(./node_modules/css-loader/dist/cjs.js??ref--5-oneOf-4-1!./node_modules/postcss-loader/src??Postcss!./src/index.css)警告 (309:5)开始值有混合支持,考虑使用Flex启动
从API中,我得到这样的消息:“2022-05-12T15:55:03.000000Z”我的问题是,我如何才能做到:12.05.2022,15:55 我的问题是,这里有什么简单的方法吗?否则我可以用字符串方法慢慢地和部分地转换它,但我想一定有更好、更合适的方法? 提前感谢您
我有一个Spring Boot应用程序,它有一些外部依赖(例如,项目之外的文件,需要存在,以便应用程序正确启动)。 和一系列其他例外。有没有一种方法可以恰当地做到这一点?
问题内容: 是否有一个内置的转换方法为在Python,例如获得在指定日期的午夜?相反的转换很容易:有一个方法。 我真的必须手动打电话吗? 问题答案: 您可以使用;现在,您创建一个初始化为午夜的对象。
我有一张谷歌表,上面有日期时间数字,格式如下:42385.7441666700 我正在写一个脚本,我想以HH:MM的格式从这些数字中提取时间。上述数字应返回17:51。 我尝试了此代码,但不起作用:
问题内容: 属性的允许在呈现相应视图之前执行一些作业。 如果我想在执行这些作业时显示微调框以增加用户体验怎么办? 确实,否则,用户会感觉到应用程序已被阻止,因为例如在大于600的毫秒内没有显示任何视图元素。 当然,由于该功能,因此可以 从当前视图中定义* 要显示的全局元素,以便显示微调器。 但是我不想只在中间放置一个糟糕的微调器来隐藏整个页面。 我希望Webapp的某些页面在显示加载方式方面有所不