【发布时间】:2020-05-02 18:11:51
【问题描述】:
我们编写了一个自定义 jar,它实现了 swagger 使用的 OpenApi 标准的有限版本。这个jar使用ASTTransformer实现,在项目构建时生成json文件,并将生成的文件添加到项目的build/resources/main/public目录中。
我们已将此 jar 添加到我们的 Grails 3 项目中,并将以下内容添加到我们的 application.yml
grails:
resources:
pattern: '/*.json'
通过此设置,我们可以导航到http://server/projectRoot/openapi_v2.json,应用程序会返回静态文件。
我们现在正在将项目迁移到 Grails 4。执行项目的构建,json 文件仍在生成到相同的构建目录,但是 url 不再返回该文件。
我试图研究一下 Grails 3 和 4 之间在 application.yml 配置方面是否有任何变化,或者是否需要额外的东西。
我们确实在https://docs.grails.org/latest/guide/upgrading.html 上找到了一条关于可能将sourceResources 添加到build.gradle 中的bootRun 的注释,但这似乎并没有解决问题。
所以我的问题是,有谁知道是什么导致 Grails 4 无法正确映射到 Grails 3 能够正确映射到的公共静态资源?
【问题讨论】:
-
"我们现在正在将项目迁移到 Grails 4。执行项目的构建,json 文件仍在生成到相同的构建目录..." - 您的构建设置是否将jar 文件中的 json 文件与您使用 Grails 3 时的位置相同吗?
-
关于何时生成文件没有特定于项目的内容。文件的生成是由 @AstTransformer 注释的
performInjectionOnAnnotatedClass方法的实现驱动的。 @JeffScottBrown 编辑:该类实现了GlobalClassInjector -
嗯,我刚刚注意到 jar 项目的
build.gradle,而不是包含 jar 的项目,其中包含addResources = true。我可能需要看看修复它并用 grails 4 重新编译 jar 是否会有所不同。 -
@JeffScottBrown 好吧,粗鲁。看起来就是这样。哈哈。我觉得我好笨。我不会想到 jar 设置会影响 jar 导入到的项目。