在Micronaut 3.7+中如何将自定义文件添加到生成的resource-config.json中
没问题,针对你在Micronaut应用里需要把Google LibPhoneNumber的ProtoBuf资源文件加入到resource-config.json的需求,有两种实用方案,我给你详细拆解:
方案一:通过Micronaut Gradle插件直接配置
这是最直接的方式,你可以在项目的build.gradle(或build.gradle.kts)里通过micronaut扩展来定义要包含的资源模式,不用一个个手动列文件:
Groovy DSL版本
micronaut { resources { includes { // 用通配符匹配所有国家的PhoneNumberMetadata文件 pattern 'com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_*' // 匹配所有国家的ShortNumberMetadata文件 pattern 'com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_*' } } }
Kotlin DSL版本
micronaut { resources { includes { pattern("com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_*") pattern("com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_*") } } }
这样配置后,Micronaut Gradle插件在生成resource-config.json时,会自动把这些通配符模式添加到includes列表里,一次性覆盖你需要的所有国家的ProtoBuf文件,比逐个添加高效多了。
方案二:通过源码注解配置
如果你希望把资源配置和代码绑定在一起,可以使用Micronaut的@ResourceConfig注解,创建一个空的配置类来承载这个注解:
Java版本
import io.micronaut.context.annotation.ResourceConfig; @ResourceConfig( includes = { "com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_*", "com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_*" } ) public class PhoneNumberResourceConfig { // 无需编写任何逻辑,仅作为注解的载体 }
Groovy版本
import io.micronaut.context.annotation.ResourceConfig @ResourceConfig( includes = [ "com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_*", "com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_*" ] ) class PhoneNumberResourceConfig {}
当Micronaut构建应用时,会扫描到这个注解,并自动将指定的资源模式合并到生成的resource-config.json中。
验证配置是否生效
配置完成后,运行./gradlew assemble(Windows下用gradlew.bat assemble),然后查看项目的build/classes/java/main/META-INF/micronaut/resource-config.json文件,你会发现指定的资源模式已经被添加到includes数组里了,说明配置生效。
另外要注意:Micronaut会自动合并默认的资源配置和你自定义的配置,不用担心覆盖原有内容,两者会共存于最终的resource-config.json中。
备注:内容来源于stack exchange,提问作者saw303

