CloudFunction 作为 gradle 子项目

时间:2021-02-05 19:56:17

标签: java gradle google-cloud-functions

我想部署一个定义为 gradle 子项目的 CloudFunction。

parent/build.gradle.kts
parent/cloudfunction/build.gradle.kts

似乎部署将子 build.gradle.kts 复制到 workspace/ 文件夹并忽略父构建脚本。然后构建失败并出现奇怪的错误,例如:

e: /workspace/build.gradle.kts:7:5: Unresolved reference: implementation
e: /workspace/build.gradle.kts:8:5: Unresolved reference: implementation
e: /workspace/build.gradle.kts:9:5: Unresolved reference: implementation

我猜这是因为在父构建脚本中定义了 java、jvm 和其他插件/设置。

所以我想知道 - 有没有办法克服这个问题?我非常希望避免重复父构建脚本的内容——这正是拥有父构建脚本的重点——以避免重复。

1 个答案:

答案 0 :(得分:1)

解决方案是传递直接编译和隐藏的 JAR,而不是让 gcloud 自行编译。

<块引用>

您可以部署包含该函数的预构建 JAR。如果您需要部署一个函数,该函数使用私有工件存储库中的依赖项,而从源代码构建时无法从 GCP 的构建管道访问该存储库中的依赖项,则这尤其有用。 JAR 可以是包含函数类及其所有依赖项类的超级 JAR,也可以是在 Class-Path 文件中包含 META-INF/MANIFEST.MF 项的瘦 JAR,用于依赖项 JAR。

在 Cloud Functions 中部署 JAR 的示例:

gcloud functions deploy jar-example \
   --entry-point=Example \
   --runtime=java11 \
   --trigger-http \
   --source=build/libs

从 JAR 部署部分描述了以下内容:

https://cloud.google.com/functions/docs/concepts/java-deploy#deploy_from_a_jar