Erstellen Sie Java-Anwendungen mit IBM Cloud-Funktionen

Eine Beschreibung der IBM Cloud-Funktionen selbst finden Sie unter Erstellen einer PHP-Anwendung mit IBM Cloud-Funktionen - Qiita.

Hello World

Erstellt mit IntelliJ IDEA (im Folgenden als IntelliJ abgekürzt). Die Umgebung ist Mac.

Öffnen Sie IntelliJ und klicken Sie auf "Neues Projekt erstellen" oder erstellen Sie ein Projekt aus "Datei" - "Neu" - "Projekt".

Wählen Sie links Gradle aus, aktivieren Sie rechts Java und klicken Sie auf Weiter.

image.png

Die Gruppen-ID kann leer sein, wenn Sie nicht vorhaben, sie im Maven-Repository bereitzustellen. Geben Sie den Projektnamen in ArtifactId ein. Hier ist es Sample-Java. Belassen Sie die Version als Standard.

image.png

Aktivieren Sie die Option Automatischen Import verwenden.

image.png

Beenden Sie den Projektnamen und den Projektspeicherort so wie sie sind.

Wenn der Vorgang abgeschlossen ist, wird die anfängliche Verarbeitung von Gradle ausgeführt und die Verzeichnisstruktur ist wie folgt.

image.png

Klicken Sie mit der rechten Maustaste auf das Verzeichnis src --main --java und erstellen Sie eine Java-Klasse.

image.png

Der Name ist Sample.

Weitere Informationen finden Sie im Code in Java-Beispiel zum Erstellen und Starten von Cloud-Funktionsaktionen.

import com.google.gson.JsonObject;
public class Sample {
    public static JsonObject main(JsonObject args) {
        String name = "stranger";
        if (args.has("name"))
            name = args.getAsJsonPrimitive("name").getAsString();
        JsonObject response = new JsonObject();
        response.addProperty("greeting", "Hello " + name + "!");
        return response;
    }
}

Zu Sample.java. Fügen Sie gson zu den Abhängigkeiten von build.gradle hinzu, um gson zu importieren.

version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.code.gson:gson:2.6.2'  //hinzufügen
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Nach dem Hinzufügen wird gson installiert.

Schauen wir uns jetzt build.gradle an.

Stellen Sie die Version dieses Projekts mit Version ein.

apply plugin: 'java'

Stellen Sie das Java-Plug-In mit [^ 1] ein. Jetzt können Sie die in Java verwendeten Einstellungen und Aufgaben verwenden. Die Verzeichnisstruktur, die durch Erstellen eines IntelliJ-Projekts erstellt wurde

└── src/
    ├── main/
    │   ├── java/
    │   └── resources/
    └── test/
        ├── java/
        └── resources/

Dies ist jedoch das Standardprojektlayout des Java-Plug-Ins

src/main/Java-Quelle für Java-Produkte
src/main/Ressourcen Produktressourcen
src/test/Java-Quelle für Java-Test
src/test/Ressourcen Testressourcen

Es ist geworden.

Stellen Sie Repositorys so ein, dass sie das Maven Central Repository verwenden.

Schreiben Sie Abhängigkeitsbibliotheken in Abhängigkeiten. Schreiben Sie die Abhängigkeit zur Kompilierungszeit in compile und die zusätzliche Abhängigkeit zur Kompilierungszeit des Tests in testCompile. Der Schreibstil unterscheidet sich zwischen "compile" und "testCompile", der Schreibstil von "compile" jedoch

compile group: 'com.google.code.gson', name: 'gson', version: '2.6.2'

Kurzfassung von. Gradle-Einstellungen werden in Groovy geschrieben, aber da Groovy die Klammern der Methode weglassen kann, wird compile nicht in Klammern gesetzt. Da es nicht weggelassen werden kann, wenn kein Argument vorhanden ist, wird es an mavenCentral () angehängt.

Sie können die Version, die Anwendung, die Quellkompatibilität, die Repositorys und die Abhängigkeiten überprüfen, die hier in Projekt festgelegt sind.

Jetzt mach ein Glas. Klicken Sie auf der rechten Seite von IntelliJ auf Gradle, um das Fenster Gradle-Projekte aufzurufen.

image.png

Wenn Sie "Tasks" - "build" - "jar" ausführen, erhalten Sie in "build / libs" ein jar mit dem Namen "sample-java-1.0-SNAPSHOT.jar".

Oder es gibt eine Datei namens "gradlew" im Projektverzeichnis. Verwenden Sie diese

$ ./gradlew jar

Aber Sie können ein Glas erstellen. gradlew wird als Gradle-Wrapper bezeichnet, der bei Bedarf Gradle-Binärdateien herunterlädt.

Lassen Sie uns den Inhalt des Glases überprüfen.

$ jar -tf build/libs/sample-java-1.0-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
Sample.class

-t ist eine Option zum Anzeigen des Inhalts des Archivs, -f ist eine Dateispezifikation.

jar ist eine komprimierte Datei im Zip-Format.

$ file build/libs/sample-java-1.0-SNAPSHOT.jar
build/libs/sample-java-1.0-SNAPSHOT.jar: Zip archive data, at least v1.0 to extract

Der Inhalt der komprimierten Datei kann übrigens mit Vim angezeigt werden.

$ vim build/libs/sample-java-1.0-SNAPSHOT.jar
" zip.vim version v28
" Browsing zipfile /Users/tmsanrinsha/IdeaProjects/sample-java/build/libs/sample-java-1.0-SNAPSHOT.jar
" Select a file with cursor and press ENTER

META-INF/
META-INF/MANIFEST.MF
Sample.class

Setzen Sie den Cursor auf die Zeile "META-INF / MANIFEST.MF" und drücken Sie die Eingabetaste

Manifest-Version: 1.0

Der Inhalt wird angezeigt als.

Aktion hochladen.

$ bx wsk action create sample-java build/libs/sample-java-1.0-SNAPSHOT.jar --main Sample

Lauf.

$ bx wsk action invoke sample-java --result
{
    "greeting": "Hello stranger!"
}

Parameter einstellen und ausführen.

$ bx wsk action invoke sample-java --result -p name reader
{
    "greeting": "Hello reader!"
}

Wenn es abhängige Bibliotheken gibt

$ jar -tf build/libs/sample-java-1.0-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
Sample.class

Wenn man sich den Inhalt des Glases ansieht, ist Gson nicht enthalten. Gson funktioniert jedoch auch dann, wenn es nicht von IBM Cloud Functions bereitgestellt wird.

Erstellen von OpenWhisk-Aktionen mit Java und Gradle --IBM Cloud Blog mit abhängigen Bibliotheken Es gibt ein Beispiel.

Schreiben Sie Sample.java wie folgt um. Dies ist ein Programm, das den empfangenen Text als QR-Code zurückgibt.

import java.io.*;
import java.util.Base64;
import com.google.gson.JsonObject;
import com.google.zxing.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;

public class Sample {

    public static JsonObject main(JsonObject args) throws Exception {
        String text = args.getAsJsonPrimitive("text").getAsString();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputStream b64os = Base64.getEncoder().wrap(baos);

        BitMatrix matrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 300, 300);

        MatrixToImageWriter.writeToStream(matrix, "png", b64os);

        b64os.close();

        String output = baos.toString("utf-8");
        JsonObject response = new JsonObject();
        response.addProperty("qr", output);

        return response;
    }
}

Schreiben Sie build.gradle wie folgt um.

version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    provided
    compile.extendsFrom provided
}

dependencies {
    provided 'com.google.code.gson:gson:2.6.2'
    compile 'com.google.zxing:core:3.3.0'
    compile 'com.google.zxing:javase:3.3.0'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

jar {
    dependsOn configurations.runtime
    from {
        (configurations.runtime - configurations.provided).collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}

Die Einstellung dieses Gradles basiert auf Fat Jars mit ausgeschlossenen Abhängigkeiten in Gradle.

Zuerst,

configurations {
    provided
    compile.extendsFrom provided
}

Definieren Sie "bereitgestellt" in und ["erweitertFrom"](https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html#org.gradle.api.artifacts. Erben Sie die Kompilierung von der mit Configuration bereitgestellten Erweiterung: extensFrom (org.gradle.api.artifacts.Configuration []).

In "Abhängigkeiten" werden diejenigen, die nicht in das Glas aufgenommen werden müssen, in "bereitgestellt" definiert, und diejenigen, die enthalten sind, werden in "kompilieren" definiert. Da "kompilieren" von "bereitgestellt" abhängt, ist die in "bereitgestellt" geschriebene Abhängigkeit zum Zeitpunkt der Kompilierung ebenfalls enthalten.

Ich mache "DependantsOn" mit "Jar", aber es hat ohne es funktioniert, also weiß ich nicht, ob es da ist.

[from](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:from(java. lang.Object [])) wird verwendet, um die Dateien festzulegen, die in das JAR aufgenommen werden sollen. In from enthalten ist configuration.runtime minus configuration.provided. Gemäß Abhängigkeitskonfigurationen ist "Laufzeit" eine Vererbung von "Kompilieren", daher befindet sich "Kompilieren" in "Laufzeit". Und die Abhängigkeit von "bereitgestellt" wird eingegeben und von "bereitgestellt" subtrahiert, so dass nur die Abhängigkeit von "kompilieren" übrig bleibt.

Mach ein Glas,

$ ./gradlew jar
$ jar -tf build/libs/sample-java-1.0-SNAPSHOT.jar

Wenn Sie dies tun, können Sie sehen, dass andere Bibliotheken als Gson enthalten sind.

aktualisieren

$ bx wsk action update sample-java build/libs/sample-java-1.0-SNAPSHOT.jar --main Sample

Lauf

$ bx wsk action invoke sample-java --result -p text 'Hello world!'
{
    "qr": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsAQAAAABRBrPYAAABHElEQVR42u3aPRKCMBCG4VBxDI5KjpojWFIR2ezyEx3Uwiyj86ZwgjxU32w2/IT8ybgFGAwGg8F+ik3BxpDnMOapy9H+6GB+TI9yHGSWepkdT8CcWJRgooalF0
h2sEvYHhbsOiY52QUwf5brQnm3vsEasK2JT1Y3b3o9rAGrRlxPvt73wr7NJgumRDTK4Zj6WX5gfkxGEpG0bo4VBPNidfsIS07lNm+ZZZgfs4iWsMoFs9ZNGDLMj+mYrUaShvW8lYI5MItt1JNldtbrYQ3YoV8Ys9u8HubItvYha5a2871uYG5
sf7xhD8D7sr3qYFcwa+JBbzBOw4I1Zw/vImBubH8ZtNZNeLG+wVqw6qFf/UIC5sX4HAIGg8Fgf8Pu1ACAFLpztaIAAAAASUVORK5CYII="
}

Das Ergebnis wird ordnungsgemäß wiedergegeben. Um dieses PNG zu machen

bx wsk action invoke sample-java --result -p text 'Hello world!' | jq -r .qr | base64 -d > qr.png

Wie

$ open qr.png

Dann wird der QR-Code angezeigt.

Erstellen Sie eine Methode zum Debuggen

Fügen Sie "public static void main (String [] args)" hinzu, damit Sie mit "args" von "public static JsonObject main (JsonObject args)" spielen können.

public class Sample {

    public static void main(String[] args) throws Exception {
        String str;
        if (args.length == 0) {
            str = "{\"text\":\"Hello stranger\"}";
        } else {
            str = args[0];
        }
        JsonObject jsonArgs = new JsonParser().parse(str).getAsJsonObject();
        System.out.println(main(jsonArgs).toString());
    }

    public static JsonObject main(JsonObject args) throws Exception {
// ...
    }
}

Wenn nun ein Argument angegeben und ausgeführt wird, wird das erste Argument ausgeführt, andernfalls wird "str" verwendet, um "public static JsonObject main (JsonObject args)" auszuführen.

Wenn Sie eine Methode für "public static void main (String [] args)" erstellen, können Sie sie ausführen, indem Sie auf der linken Seite des IntelliJ-Codes eine ▶ Markierung setzen und darauf klicken.

Wenn Sie das Argument festlegen möchten, können Sie es unter "Ausführen" - "Konfigurationen bearbeiten ..." festlegen. Es wäre jedoch einfacher, das "str" im Code zu korrigieren.

Wenn Sie es auf Gradle ausführen möchten, fügen Sie build.gradle Folgendes hinzu.

// ...
apply plugin: 'java'
apply plugin: 'application' //hinzufügen

mainClassName = 'Sample' //hinzufügen

sourceCompatibility = 1.8
// ...

Mit dem Anwendungs-Plugin können Sie eine Aufgabe namens "Ausführen" zum Ausführen einer Anwendung verwenden. Der Hauptklassenname wird mit mainClassName festgelegt.

mit diesem

$ ./gradlew run

Kann mit ausgeführt werden. Sie können es auch über Aufgaben - Anwendung - Ausführen im Fenster Gradle-Projekte ausführen.

Es ist jedoch nicht möglich, Argumente direkt mit "gradle task" zu übergeben. Laut Gradle-Task - Argumente an Java-Anwendung übergeben - Stapelüberlauf

run {
    if (project.hasProperty("appArgs")) {
        args Eval.me(appArgs)
    }
}

Zu bauen

$ ./gradlew run -PappArgs='"{\"text\":\"a\"}"'

Kann mit Argumenten ausgeführt werden.

Mit Git verwalten

Die folgenden Dateien werden nicht benötigt, schreiben Sie sie also in ".gitignore".

.gitignore


.gradle/
.idea/
build/

Geben Sie beim Importieren die GitHub-URL usw. unter "Datei" - "Neu" - "Projekt aus Versionskontrolle" an. Wird ein nicht verknüpftes Gradle-Projekt angezeigt? Ich werde daher ein Gradle-Projekt importieren.

Anstatt aus der Versionskontrolle zu importieren, können Sie "git clone", "File" - "New" - "Project from Existing Sources ..." auswählen und Gradle in "Import Gradle project" auswählen.

Probe diesmal gemacht

Referenzmaterial

[^ 1]: Kapitel 23 Java Plugin, [Das Java Plugin --Gradle Benutzerhandbuch](https: //docs.gradle) .org / current / userguide / java_plugin.html). Beachten Sie, dass Japanisch alt ist.

Recommended Posts

Erstellen Sie Java-Anwendungen mit IBM Cloud-Funktionen
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Erstellen Sie mit JAVA eine unveränderliche Klasse
Verwandeln Sie Java-Anwendungen mit Jib ganz einfach in Docker
[Java] Erstellen Sie mit Gradle ein ausführbares Modul
CICS-Java-Anwendung ausführen- (2) Build-Management mit Maven
Anfänger erstellen Web-Apps mit Java und MySQL (jederzeit hinzufügen)
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Erstellen Sie eine CSR mit erweiterten Informationen in Java
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Kommen Sie mit Java-Containern in Cloud Run zurecht
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit
Aufrufen von Funktionen in großen Mengen mit Java Reflection
[Anfänger] Erstellen Sie ein wettbewerbsfähiges Spiel mit grundlegenden Java-Kenntnissen
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Serverloses Java EE beginnend mit Quarkus und Cloud Run
Installieren Sie Java mit Homebrew
Versuchen Sie es mit Trailblazer
Wechseln Sie die Plätze mit Java
[Java] Erstellen Sie einen Filter
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Java-Download mit Ansible
Erstellen Sie JSON in Java
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Ersteinstellungsmethode bei der Erstellung von Alexa Skill mit JAVA (Cloud 9)
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
[Java] Beispielprojekt zum Entwickeln von Webanwendungen mit Spring Boot
Laden Sie Dateien mit dem SDK (Java-Version) auf Aspera hoch, das mit IBM Cloud Object Storage (ICOS) geliefert wird.