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.
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.
Aktivieren Sie die Option Automatischen Import verwenden.
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.
Klicken Sie mit der rechten Maustaste auf das Verzeichnis src --main --java und erstellen Sie eine Java-Klasse.
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.
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!"
}
$ 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.
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.
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
[^ 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