Specify dependencies in Java
Stay organized with collections
Save and categorize content based on your preferences.
You can use any Java compatible libraries with a supported Java runtime to write Cloud Run functions in Java. You can use either Maven or Gradle to manage dependencies for your Java Cloud Run functions.
Declaring and managing dependencies
You can declare and manage dependencies using either Maven or Gradle:
To manage dependencies using Maven:
Specify the dependencies in the
<dependencies>section inside thepom.xmlfile of your project.To manage your project's dependency on Maven itself, you can use the Maven Wrapper. If you don't use the Maven Wrapper, Cloud Run functions defaults to using a recent version of Maven when running
gcloud functions deploy.
To manage dependencies using Gradle, you specify the dependencies in the
build.gradlefile of your project.
The Functions Framework is a required dependency for all functions. Although Cloud Run functions installs it on your behalf when the function is created, we recommend that you include it as an explicit dependency for clarity.
If your
function relies on private dependencies, we recommend that you
mirror functions-framework to your private registry. Include the mirrored
functions-framework as a dependency to your function to avoid installing the
package from the public internet.
Using the Google Cloud Client Libraries for Java
Google Cloud Client Libraries for Java provide idiomatic access to Google Cloud services. To use a library, declare it as a dependency.
Typically you only declare dependencies on the specific libraries that your function needs. For example:
Maven
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.functions</groupId>
<artifactId>functions-hello-world</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
</properties>
<dependencies>
<!--RequiredforFunctionprimitives-->
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--
GoogleCloudFunctionsFrameworkMavenplugin
ThispluginallowsyoutorunCloudFunctionsJavacode
locally.Usethefollowingterminalcommandtoruna
givenfunctionlocally:
mvnfunction:run-Drun.functionTarget=your.package.yourFunction
-->
<groupId>com.google.cloud.functions</groupId>
<artifactId>function-maven-plugin</artifactId>
<version>0.11.0</version>
<configuration>
<functionTarget>functions.HelloWorld</functionTarget>
</configuration>
</plugin>
</plugins>
</build>
</project>Gradle
Note that this build.gradle file includes a custom task to help you run
functions locally.
applyplugin:'java'
repositories{
jcenter()
mavenCentral()
}
configurations{
invoker
}
dependencies{
// Every function needs this dependency to get the Functions Framework API.
compileOnly'com.google.cloud.functions:functions-framework-api:1.1.0'
// To run function locally using Functions Framework's local invoker
invoker'com.google.cloud.functions.invoker:java-function-invoker:1.3.1'
// These dependencies are only used by the tests.
testImplementation'com.google.cloud.functions:functions-framework-api:1.1.0'
testImplementation'junit:junit:4.13.2'
testImplementation'com.google.truth:truth:1.4.0'
testImplementation'org.mockito:mockito-core:5.10.0'
}
// Register a "runFunction" task to run the function locally
tasks.register("runFunction",JavaExec){
main='com.google.cloud.functions.invoker.runner.Invoker'
classpath(configurations.invoker)
inputs.files(configurations.runtimeClasspath,sourceSets.main.output)
args(
'--target',project.findProperty('run.functionTarget')?:'',
'--port',project.findProperty('run.port')?:8080
)
doFirst{
args('--classpath',files(configurations.runtimeClasspath,sourceSets.main.output).asPath)
}
}