Especifique dependências em Java

Pode usar quaisquer bibliotecas compatíveis com Java com um tempo de execução Java suportado para escrever funções do Cloud Run em Java. Pode usar o Maven ou o Gradle para gerir as dependências das suas funções do Java Cloud Run.

Declarar e gerir dependências

Pode declarar e gerir dependências através do Maven ou do Gradle:

  • Para gerir dependências através do Maven:

    • Especifique as dependências na secção <dependencies> no ficheiro pom.xml do seu projeto.

    • Para gerir a dependência do seu projeto no próprio Maven, pode usar o Maven Wrapper. Se não usar o Maven Wrapper, as funções do Cloud Run usam por predefinição uma versão recente do Maven quando executam gcloud functions deploy.

  • Para gerir as dependências através do Gradle, especifique-as no ficheiro build.gradle do seu projeto.

O Functions Framework é uma dependência obrigatória para todas as funções. Embora as funções do Cloud Run o instalem em seu nome quando a função é criada, recomendamos que o inclua como uma dependência explícita para maior clareza.

Se a sua função depender de dependências privadas, recomendamos que reflita functions-framework no seu registo privado. Inclua o pacote functions-framework duplicado como uma dependência da sua função para evitar a instalação do pacote a partir da Internet pública.

Usar as bibliotecas cliente do Google Cloud para Java

As bibliotecas cliente do Google Cloud para Java oferecem acesso idiomático aos Google Cloud serviços. Para usar uma biblioteca, declare-a como uma dependência.

Normalmente, só declara dependências nas bibliotecas específicas de que a sua função precisa. Por exemplo:

Maven

<project xmlns="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>
    <!-- Required for Function primitives -->
    <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>
        <!--
          Google Cloud Functions Framework Maven plugin

          This plugin allows you to run Cloud Functions Java code
          locally. Use the following terminal command to run a
          given function locally:

          mvn function: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

Tenha em atenção que este ficheiro build.gradle inclui uma tarefa personalizada para ajudar a executar funções localmente.

apply plugin: '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)
  }
}