Anda dapat mengkompilasi program dalam lingkungan Java lokal menggunakan Maven atau Serverless Devs, memaketkan program ke dalam file ZIP atau JAR, lalu mengunggah paket kode di konsol Function Compute atau menggunakan Serverless Devs. Setelah itu, Anda dapat menguji fungsi untuk memastikan bahwa kode berjalan sesuai harapan.
Pustaka dependensi untuk runtime Java
Untuk membuat dan menyebarkan paket kode, Anda harus mengompilasi dan memaketkan kode fungsi serta pustaka dependensi bersama-sama sebagai file ZIP atau JAR.
Function Compute menyediakan pustaka dependensi berikut untuk runtime 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 di atas. Setelah mendapatkan pustaka dependensi tersebut, 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 ke dalam layer untuk mengurangi ukuran paket kode. Untuk informasi lebih lanjut, lihat Buat Layer Kustom.
Kompilasi dan Penyebaran Paket Kode Menggunakan Maven
Prerequisites
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 Handlers atau Context.
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 contoh.
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.
PentingUntuk sistem operasi macOS dan Linux, pastikan bahwa file kode dapat dibaca dan dieksekusi sebelum kompresi.
Masuk ke konsol Function Compute dan unggah paket kode.

Di tab Configurations pada halaman Function Details, periksa nilai 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 permintaan dapat dikonfigurasi sebagaiexample.App::handleRequest. Anda dapat mengklik Modify untuk memodifikasi handler jika tidak valid.
Di tab Code, klik Test Function untuk menguji fungsi.

Kompilasi dan Penyebaran Paket Kode Menggunakan Serverless Devs
Prerequisites
Serverless Devs dan dependensinya telah diinstal. Untuk informasi lebih lanjut, lihat Memulai Cepat.
Serverless Devs telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasi Serverless Devs.
Java Development Kit (JDK) telah diinstal. Anda dapat mengunduh JDK dari Unduhan Java.
Maven telah diinstal. Anda dapat mengunduh Maven dari Unduh.
Procedure
Jalankan perintah berikut untuk menginisialisasi proyek Anda:
s initKonfigurasikan Alibaba Cloud sebagai penyedia cloud, template, runtime, dan wilayah tempat aplikasi diterapkan, serta nama fungsi.
Jalankan perintah berikut untuk masuk ke direktori proyek:
cd start-fc-event-java8Berikut ini adalah struktur direktori:
start-fc-event-java8 ├── src │ └── main │ └── java │ └── example │ └── App.java ├── pom.xml ├── readme └── s.yamlJalankan perintah berikut untuk menyebarkan 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 disebarkan 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 disebarkan: 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