Topik ini menjelaskan cara mengompilasi program dalam waktu proses Java menggunakan Maven atau Serverless Devs, serta memaketkan program sebagai file ZIP atau JAR. Setelah kode dikompilasi dan dipaketkan, Anda dapat mengunggah paket kode di Konsol Function Compute atau menggunakan Serverless Devs.
Pustaka dependensi untuk waktu proses Java
Untuk membuat dan menerapkan paket kode, Anda harus mengompilasi dan memaketkan kode fungsi bersama dengan pustaka dependensinya sebagai file ZIP atau JAR.
Function Compute menyediakan pustaka dependensi berikut untuk waktu proses Java:
com.aliyun:fc-java-core: Mendefinisikan informasi seperti antarmuka handler dan objek konteks yang digunakan dalam penanganan permintaan.
com.aliyun:fc-java-events: Menyediakan tipe-tipe event dari sumber event umum.
Anda dapat menggunakan repositori pusat Maven untuk mendapatkan dependensi tersebut. Setelah mendapatkan pustaka dependensi, tambahkan mereka ke file pom.xml. Contoh kode berikut memberikan ilustrasi:
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-core -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-event -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-event</artifactId>
<version>1.2.0</version>
</dependency>Jika paket dependensi terlalu besar, Anda dapat memaketkan dependensi menjadi layer untuk mengurangi ukuran paket kode. Untuk informasi lebih lanjut, lihat Buat Layer Kustom.
Kompilasi dan penerapan paket kode menggunakan Maven
Before you start
Pastikan Java dan Maven telah diinstal. Untuk informasi lebih lanjut tentang Java, kunjungi situs resmi Java. Untuk informasi lebih lanjut tentang Maven, lihat Menginstal Apache Maven.
Procedure
Buat proyek Java. Contoh kode berikut menunjukkan jalur file App.java:
src/main/java/example/App.javaTambahkan contoh kode berikut ke file App.java: Untuk kode contoh lengkap, lihat Penangan Event, Penangan HTTP, atau Konteks.
package example; import com.aliyun.fc.runtime.Context; import com.aliyun.fc.runtime.StreamRequestHandler; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class App implements StreamRequestHandler { @Override public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { outputStream.write(new String("hello world").getBytes()); } }Di file pom.xml, konfigurasikan
build. Contoh kode:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build>CatatanAnda dapat menggunakan Apache Maven Shade atau Apache Maven Assembly. Contoh di atas menggunakan Apache Maven Shade sebagai referensi.
Buka CLI, beralih ke direktori root proyek, lalu jalankan perintah
mvn clean packageuntuk melakukan pemaketan.Contoh kode:
[INFO] Scanning for projects... ... .... .... [INFO] --------------------------< example:example >--------------------------- [INFO] Building java-example 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- ... .... .... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11.681 s [INFO] Finished at: 2020-03-26T15:55:05+08:00 [INFO] ------------------------------------------------------------------------Jika kompilasi gagal, modifikasi kode berdasarkan pesan kesalahan.
Jika kompilasi berhasil, file JAR yang dikompilasi akan berada di direktori target di folder proyek dan diberi nama HelloFCJava-1.0-SNAPSHOT.jar sesuai dengan bidang artifactId dan version di pom.xml.
Penting Untuk sistem operasi macOS dan Linux, pastikan bahwa file kode dapat dibaca dan dieksekusi sebelum kompresi.
Masuk ke Function Compute console dan unggah paket kode.

Di tab Configurations, periksa nilai dari Handler. Handler harus mengikuti format
[Nama Paket].[Nama Kelas]::[Nama Metode]. Sebagai contoh, jika nama paket adalah example, nama kelas adalah App, dan nama metode adalah handleRequest, handler dapat dikonfigurasikan sebagaiexample.App::handleRequest. Anda dapat mengklik Modify untuk memodifikasi handler jika tidak valid.
Di tab Code, klik Test Function untuk menguji fungsi.

Kompilasi dan penerapan paket kode menggunakan Serverless Devs
Before you start
Procedure
Jalankan perintah berikut untuk menginisialisasi proyek:
s init devsapp/start-fc-event-java8 -d start-fc-event-java8s init devsapp/start-fc-event-java8: Menginisialisasi proyek berdasarkan template penangan event.-d start-fc-event-java8: Menampilkan file proyek ke direktori yang ditentukan.
Setelah menjalankan perintah, pilih wilayah, nama layanan, dan nama fungsi, serta konfigurasikan kunci sesuai petunjuk.
CatatanAnda juga dapat menjalankan perintah
s inituntuk memilih template sesuai petunjuk.Jalankan perintah berikut untuk masuk ke direktori proyek:
cd start-fc-event-java8Jalankan perintah berikut untuk menerapkan proyek:
s deploySaat menjalankan perintah ini, perintah
pre-deploydijalankan terlebih dahulu. Saat perintahpre-deploydijalankan, perintahmvn packagedigunakan untuk melakukan kompilasi dan pemaketan. Paket kode diunggah dan diterapkan setelah itu. Contoh keluaran perintah:[2022-04-07 12:00:09] [INFO] [S-CORE] - Mulai pre-action [2022-04-07 12:00:09] [INFO] [S-CORE] - Action: mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------< example:HelloFCJava >------------------------- [INFO] Building HelloFCJava 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- ...... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.617 s [INFO] Finished at: 2022-04-07T20:00:14+08:00 [INFO] ------------------------------------------------------------------------ [2022-04-07 12:00:14] [INFO] [S-CORE] - Akhir pre-action Memeriksa Service, Function (0.64s) Membuat Service, Function (0.71s) Tips untuk langkah selanjutnya ====================== * Tampilkan informasi sumber daya yang diterapkan: s info * Tampilkan metrik: s metrics * Tampilkan log: s logs * Panggil fungsi jarak jauh: s invoke * Hapus Service: s remove service * Hapus Function: s remove function * Hapus Trigger: s remove trigger * Hapus CustomDomain: s remove domain helloworld: region: cn-hangzhou service: name: hello-world-service function: name: start-fc-event-java8 runtime: java8 handler: example.App::handleRequest memorySize: 128 timeout: 60Jalankan perintah
s invokeuntuk melakukan pengujian.Contoh keluaran perintah:
➜ start-fc-event-java8 s invoke ========= FC invoke Logs begin ========= FC Initialize Start RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx FC Initialize End RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx FC Invoke Start RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx FC Invoke End RequestId: b246c3bf-06bc-49e5-92b8-xxxxxxxx Duration: 7.27 ms, Billed Duration: 8 ms, Memory Size: 128 MB, Max Memory Used: 65.75 MB ========= FC invoke Logs end ========= FC Invoke Result: hello world Akhir metode: invoke