Specificare le dipendenze in Java

Puoi utilizzare qualsiasi libreria compatibile con Java con un runtime Java supportato per scrivere funzioni Cloud Run in Java. Puoi utilizzare Maven o Gradle per gestire le dipendenze per le tue funzioni Java Cloud Run.

Dichiarazione e gestione delle dipendenze

Puoi dichiarare e gestire le dipendenze utilizzando Maven o Gradle:

  • Per gestire le dipendenze utilizzando Maven:

    • Specifica le dipendenze nella sezione <dependencies> all'interno del pom.xml file del progetto.

    • Per gestire la dipendenza del progetto da Maven stesso, puoi utilizzare il Maven Wrapper. Se non utilizzi Maven Wrapper, Cloud Run Functions utilizza per impostazione predefinita una versione recente di Maven quando esegui gcloud functions deploy.

  • Per gestire le dipendenze utilizzando Gradle, devi specificarle nel build.gradle file del tuo progetto.

Il Functions Framework è una dipendenza obbligatoria per tutte le funzioni. Anche se le funzioni Cloud Run lo installano per tuo conto al momento della creazione della funzione, ti consigliamo di includerlo come dipendenza esplicita per maggiore chiarezza.

Se la funzione si basa su dipendenze private, ti consigliamo di eseguire il mirroring di functions-framework nel tuo registry privato. Includi functions-framework sottoposto a mirroring come dipendenza della funzione per evitare di installare il pacchetto dalla rete internet pubblica.

Utilizzo delle librerie client Google Cloud per Java

Le librerie client Google Cloud per Java forniscono accesso idiomatico ai servizi Google Cloud. Per utilizzare una libreria, dichiarala come dipendenza.

In genere, dichiari le dipendenze solo per le librerie specifiche di cui la funzione ha bisogno. Ad esempio:

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

Tieni presente che questo file build.gradle include un'attività personalizzata per aiutarti a eseguire le funzioni 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)
  }
}