Gradle und das App Engine-Plug-in verwenden

Gradle ist ein flexibles und deklaratives Build-Automatisierungssystem, mit dem Sie Builds, Tests, Veröffentlichungen und Bereitstellungen automatisieren können. Auf dieser Seite wird die Verwendung von Gradle mit einem App Engine-Projekt in der Standardumgebung erläutert.

Hinweis

Installieren und konfigurieren Sie die folgenden erforderlichen Komponenten:

Google Cloud-Projekt einrichten und validieren

Sie müssen Ihr Google Cloud-Projekt einrichten und die gcloud CLI installieren:

  1. Erstellen Sie mit der Google Cloud Console Ihr Google Cloud-Projekt und richten Sie es ein:

    Zu App Engine

    1. Wählen Sie ein Google Cloud-Projekt aus oder erstellen Sie ein neues.
    2. Folgen Sie den Eingabeaufforderungen, um zu prüfen, ob eine App Engine-Anwendung vorhanden und die Abrechnung aktiviert ist:
      1. Wenn Sie eine App Engine-Anwendung für das Projekt erstellen müssen, werden Sie zur Auswahl einer Region aufgefordert, in der sich die App Engine-Anwendung befinden soll.
      2. Folgen Sie der Anleitung, um ein neues Rechnungskonto zu erstellen, oder wählen Sie ein vorhandenes Konto aus.
    3. Das Dashboard wird geöffnet, nachdem die App Engine-Anwendung erstellt wurde und die Abrechnung in Ihrem Projekt aktiviert ist.
  2. Sie müssen die gcloud CLI nicht installieren, da das Plug-in das SDK bei Bedarf automatisch installiert.

Neues Gradle-Projekt erstellen

Mithilfe der Shell können Sie ein Gradle-Projekt neu erstellen. Falls Sie das Plug-in ausprobieren möchten, können Sie auch das "Hello World"-Projekt herunterladen, lokal ausführen und bereitstellen.

  1. Erstellen Sie ein neues Verzeichnis und rufen Sie es auf.

  2. So initialisieren Sie ein neues Projekt:

    gradle init --type java-library;
    mkdir -p src/main/webapp/WEB-INF;
    rm src/main/java/Library.java src/test/java/LibraryTest.java
    
  3. Fügen Sie Ihrer build.gradle-Datei Folgendes hinzu, um App Engine-Gradle-Aufgaben, Maven-Repositories, das App Engine-Gradle-Plug-in, Abhängigkeiten und die Aufgabenkonfiguration hinzuzufügen:

    buildscript {    // Configuration for building
      repositories {
        jcenter()    // Bintray's repository - a fast Maven Central mirror & more
        mavenCentral()
      }
      dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.5.0' // If a newer version is available, use it
      }
    }
    
    repositories {   // repositories for Jar's you access in your code
      maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed)
      }
      mavenCentral()
      jcenter()
    }
    
    apply plugin: 'java'                              // standard Java tasks
    apply plugin: 'war'                               // standard Web Archive plugin
    apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks
    
    dependencies {
      implementation 'com.google.appengine:appengine-api-1.0-sdk:+'  // Latest App Engine Api's
      providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    
      implementation 'jstl:jstl:1.2'
    
    // Add your dependencies here.
    //  implementation 'com.google.cloud:google-cloud:+'   // Latest Cloud API's http://googlecloudplatform.github.io/google-cloud-java
    
      testImplementation 'junit:junit:4.13.2'
      testImplementation 'com.google.truth:truth:1.1.5'
      testImplementation 'org.mockito:mockito-core:4.11.0'
    
      testImplementation 'com.google.appengine:appengine-testing:+'
      testImplementation 'com.google.appengine:appengine-api-stubs:+'
      testImplementation 'com.google.appengine:appengine-tools-sdk:+'
    }
    
    // Always run unit tests
    appengineDeploy.dependsOn test
    appengineStage.dependsOn test
    
    appengine {  // App Engine tasks configuration
      deploy {   // deploy configuration
        projectId = System.getenv('GOOGLE_CLOUD_PROJECT')
        version = '1'
      }
    }
    
    test {
      useJUnit()
      testLogging.showStandardStreams = true
      beforeTest { descriptor ->
         logger.lifecycle("test: " + descriptor + "  Running")
      }
    
      onOutput { descriptor, event ->
         logger.lifecycle("test: " + descriptor + ": " + event.message )
      }
      afterTest { descriptor, result ->
        logger.lifecycle("test: " + descriptor + ": " + result )
      }
    }
    
    group   = "com.example.appenginej8"        // Generated output GroupId
    version = "1.0-SNAPSHOT"       // Version in generated output
    
    sourceCompatibility = 1.8     // App Engine Flexible uses Java 8
    targetCompatibility = 1.8     // App Engine Flexible uses Java 8
  4. Fügen Sie Ihrem Projekt außerdem mithilfe eines Texteditors oder einer integrierten Entwicklungsumgebung (IDE) folgende Dateien hinzu:

Unter Konfigurationsdateien finden Sie einen Überblick über ein Java App Engine-Projekt.

Die Hello World-App herunterladen

  1. Klonen Sie das Repository der Hello World Beispiel-App auf dem lokalen Computer:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

  2. Wechseln Sie in das Verzeichnis, das den Beispielcode enthält:

    cd java-docs-samples/appengine-java8/helloworld
    

Anwendung mit dem Entwicklungsserver testen

  1. Wenn Sie bei der lokalen Ausführung des Projekts auf Google-Ressourcen zugreifen möchten, legen Sie die Standardanmeldedaten für die Anwendung fest. Dazu führen Sie Folgendes aus:

    gcloud auth application-default login
    
  2. Wechseln Sie zum Stammverzeichnis Ihrer Anwendung.

  3. Sie können die Anwendung in der Entwicklungsphase jederzeit auf dem Entwicklungsserver ausführen und testen, indem Sie Gradle aufrufen.

    gradle appengineRun
    

    Sie können Gradle aber auch ausführen, ohne es zu installieren. Verwenden Sie dazu den Gradle-Wrapper.

  4. Warten Sie, bis der Server gestartet worden ist. Der Server wird während der Ausführung Ihrer Anwendung gestartet, wenn eine Nachricht wie diese angezeigt wird:

    :compileJava
    :processResources NO-SOURCE
    :classes
    :war
    :explodeWar
    :assemble
    :appengineRun
    2018-06-05 22:50:46.231:INFO::main: Logging initialized @321ms
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: Module instance default is running at http://localhost:8080/
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: The admin console is running at http://localhost:8080/_ah/admin
    Jun 05, 2018 10:50:49 PM com.google.appengine.tools.development.DevAppServerImpl doStart
    INFO: Dev App Server is now running
    
  5. Ihre Anwendung läuft unter http://127.0.0.1:8080.

Fehlerbehebung auf dem Entwicklungsserver

Wenn Sie Fehler in einer lokal ausgeführten Anwendung beheben möchten, legen Sie das Attribut jvmFlags so fest, dass die Fehlerbehebung in der zugrunde liegenden JVM aktiviert wird. Beispiel:

    appengine {
      run {
        jvmFlags = ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005']
      }
    }

Hot Reload der Anwendung aktivieren

Ein Hot Reload ist die Möglichkeit, eine oder mehrere Klassen in einer laufenden Anwendung zu aktualisieren, ohne die Umgebung zu stoppen. Zur Aktivierung eines Hot Reloads müssen Sie folgende Schritte ausführen:

  • Weisen Sie den lokalen Server an, nach Änderungen zu suchen:

    appengine {
      run {
        automaticRestart = true
      }
    }
    
  • Führen Sie bei laufender Anwendung die Aufgabe explodeWar aus, um die Änderungen direkt in die explodierte Anwendung zu kopieren und an die laufende Anwendung weiterzugeben.

Anwendung erstellen

So stellen Sie Ihre Anwendung bereit:

gradle appengineDeploy

Die appengineDeploy-Aufgabe und alle anderen Gradle-Aufgaben haben zugehörige Attribute, die Sie verwenden können. Eine vollständige Liste der Aufgaben und Attribute finden Sie unter App Engine-Gradle-Plug-in – Aufgaben und Attribute.

Gradle-Wrapper verwenden

Gradle bietet einen Mechanismus, um die erforderliche Version von Gradle ohne Installation herunterzuladen und auszuführen :

Linux/macOS

./gradlew appengineRun

Windows

gradlew.bat appengineRun

Weitere Informationen zu Gradle finden Sie unter App Engine-Gradle-Plug-in – Aufgaben und Attribute.

Weitere Informationen