ציון יחסי תלות ב-Java

אתם יכולים להשתמש בכל ספריה שתואמת ל-Java עם סביבת זמן ריצה נתמכת של Java כדי לכתוב פונקציות Cloud Run ב-Java. אפשר להשתמש ב-Maven או ב-Gradle כדי לנהל את התלות בפונקציות Cloud Run ב-Java.

הצהרה על יחסי תלות וניהול שלהם

אפשר להצהיר על יחסי תלות ולנהל אותם באמצעות Maven או Gradle:

  • כדי לנהל יחסי תלות באמצעות Maven:

    • מציינים את יחסי התלות בקטע <dependencies> בקובץ pom.xml של הפרויקט.

    • כדי לנהל את התלות של הפרויקט ב-Maven, תוכלו להשתמש ב-Maven Wrapper. אם אתם לא משתמשים ב-Maven Wrapper, כברירת מחדל בפונקציות Cloud Run נעשה שימוש בגרסה האחרונה של Maven בהרצה של gcloud functions deploy.

  • כדי לנהל יחסי תלות באמצעות Gradle, מציינים את יחסי התלות בקובץ build.gradle של הפרויקט.

Functions Framework הוא תלות נדרשת לכל הפונקציות. למרות שפונקציות Cloud Run מתקינות אותו בשמכם כשיוצרים את הפונקציה, מומלץ לכלול אותו כתלות מפורשת כדי שהדברים יהיו ברורים.

אם הפונקציה שלכם מסתמכת על יחסי תלות פרטיים, מומלץ לשכפל את functions-framework למאגר הפרטי שלכם. כדי להימנע מהתקנת החבילה מהאינטרנט הציבורי, צריך לכלול את functions-framework המשוכפל כהסתמכות בפונקציה.

שימוש בספריות הלקוח של Google Cloud ל-Java

ספריות הלקוח של Google Cloud ל-Java מספקות גישה אידיומטית לשירותי Google Cloud . כדי להשתמש בספרייה, צריך להגדיר אותה כתלות.

בדרך כלל מצהירים על יחסי תלות רק בספריות הספציפיות שהפונקציה צריכה. לדוגמה:

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

שימו לב שהקובץ build.gradle הזה כולל משימה מותאמת אישית שתעזור לכם להפעיל פונקציות באופן מקומי.

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)
  }
}