in cmd/java/functions_framework/main.go [238:312]
func installFunctionsFramework(ctx *gcp.Context, layer *libcnb.Layer) (string, error) {
jars := []string{}
pomExists, err := ctx.FileExists("pom.xml")
if err != nil {
return "", err
}
if pomExists {
mvn, err := java.MvnCmd(ctx)
if err != nil {
return "", err
}
// If the invoker was listed as a dependency in the pom.xml, copy it into target/_javaInvokerDependency.
if _, err := ctx.Exec([]string{
mvn,
"--batch-mode",
"dependency:copy-dependencies",
"-DoutputDirectory=target/_javaInvokerDependency",
"-DincludeGroupIds=com.google.cloud.functions",
"-DincludeArtifactIds=java-function-invoker",
}, gcp.WithUserAttribution); err != nil {
return "", err
}
jars, err = ctx.Glob("target/_javaInvokerDependency/java-function-invoker-*.jar")
if err != nil {
return "", fmt.Errorf("finding java-function-invoker jar: %w", err)
}
} else {
buildGradleExists, err := ctx.FileExists("build.gradle")
if err != nil {
return "", err
}
if buildGradleExists {
// If the invoker was listed as an implementation dependency it will have been copied to build/_javaFunctionDependencies.
jars, err = ctx.Glob("build/_javaFunctionDependencies/java-function-invoker-*.jar")
if err != nil {
return "", fmt.Errorf("finding java-function-invoker jar: %w", err)
}
}
}
if len(jars) == 1 && isInvokerJar(ctx, jars[0]) {
if err := ctx.ClearLayer(layer); err != nil {
return "", fmt.Errorf("clearing layer %q: %w", layer.Name, err)
}
// No need to cache the layer because we aren't downloading the framework.
layer.Cache = false
addFrameworkVersionLabel(ctx, layer, jars[0])
return jars[0], nil
}
ctx.Warnf("Failed to find vendored functions-framework dependency. Installing version %s:\n%v", defaultFrameworkVersion, err)
frameworkVersion := defaultFrameworkVersion
// Install functions-framework.
metaVersion := ctx.GetMetadata(layer, versionKey)
if frameworkVersion == metaVersion {
ctx.CacheHit(layerName)
} else {
ctx.CacheMiss(layerName)
if err := ctx.ClearLayer(layer); err != nil {
return "", fmt.Errorf("clearing layer %q: %w", layer.Name, err)
}
if err := downloadFramework(ctx, layer, frameworkVersion); err != nil {
return "", err
}
ctx.SetMetadata(layer, versionKey, frameworkVersion)
}
cloudfunctions.AddFrameworkVersionLabel(ctx, &cloudfunctions.FrameworkVersionInfo{
Runtime: "java",
Version: frameworkVersion,
Injected: true,
})
return filepath.Join(layer.Path, "functions-framework.jar"), nil
}