如何在Gradle的smithyBuild任务中设置SMITHY_DEPENDENCY_MODE复用依赖模型
问题
如何为smithyBuild Gradle任务覆盖SMITHY_DEPENDENCY_MODE变量,以允许从其他包导入Smithy类型?
目标
我有两个API Smithy模型包,希望第二个“child-api-models”能够复用第一个“parent-api-models”中的通用Smithy类型。
已做的调研与测试
Smithy官方文档指出,可通过更新smithy-build.json文件添加Maven依赖和仓库来实现跨包模型导入,文档说明:
定义构建模型所需的Java Maven依赖。依赖用于引入模型导入、构建插件、验证器、转换及其他扩展。
但我在build.gradle.kts和smithy-build.json文件中添加父Smithy模型包作为依赖后,执行gradle build时smithyBuild任务失败,报错:
Task :smithyBuild FAILED
Running smithy build
SMITHY_DEPENDENCY_MODE is set to 'forbid', but the following Maven dependencies are defined in smithy-build.json: [REDACTED]. Dependencies are forbidden in this configuration.
SMITHY_DEPENDENCY_MODE未出现在Smithy公开文档中,但通过代码搜索可知,它接受的值为“forbid”、“standard”或“ignore”,其中“standard”是允许从依赖中导入Smithy模型的正确值。
我尝试了以下操作,但均触发相同错误:
- 执行
gradle build前运行export SMITHY_DEPENDENCY_MODE="standard" - 运行
SMITHY_DEPENDENCY_MODE="standard" gradle build - 在gradle.properties中添加
SMITHY_DEPENDENCY_MODE="standard" - 在build.gradle.kts中添加以下配置:
tasks.named("smithyBuild") { doFirst { System.setProperty("SMITHY_DEPENDENCY_MODE", "standard") } }
若在doFirst块中使用environment("SMITHY_DEPENDENCY_MODE", "standard"),则会出现编译错误:
Script compilation error:
Line 121: environment("SMITHY_DEPENDENCY_MODE", "standard")^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public inline fun <T : AbstractExecTask<*>> AbstractExecTask<TypeVariable(T)>.environment(vararg environmentVariables: Pair<String, Any?>): TypeVariable(T) defined in org.gradle.kotlin.dsl public inline fun JavaExec.environment(vararg environmentVariables: Pair<String, Any?>): JavaExec defined in org.gradle.kotlin.dsl public inline fun Test.environment(vararg environmentVariables: Pair<String, Any?>): Test defined in org.gradle.kotlin.dsl public inline fun ProcessForkOptions.environment(vararg environmentVariables: Pair<String, Any?>): ProcessForkOptions defined in org.gradle.kotlin.dsl
跨包共享Smithy模型应该是常见场景,希望能找到遗漏的解决关键点。
内容的提问来源于stack exchange,提问作者Mark Sayson

