Dengan menggunakan Library Klien Cloud untuk Java, Anda dapat mengompilasi aplikasi sebagai image native. Pendekatan ini memberikan manfaat performa pada aplikasi Anda dengan memanfaatkan kompilasi ahead-of-time untuk mengurangi waktu mulai dingin dan jejak memori aplikasi Anda.
Versi library klien
Pastikan Anda menggunakan versi 25.4.0 atau yang lebih baru dari
Bill of Materials Cloud Libraries (libraries-bom) atau Anda
menggunakan library klien yang dipublikasikan setelah Mei 2022.
Sebagian besar pengguna mengelola versi library klien mereka menggunakan libraries-bom.
Cara ini adalah cara mudah untuk memeriksa apakah versi semua library klien dalam project Anda kompatibel satu sama lain dan terbaru.
Untuk mengetahui informasi selengkapnya tentang cara menerapkan libraries-bom ke project Anda di Maven dan Gradle, lihat Mengupdate project untuk menggunakan BOM.
Library yang didukung
Library Klien Google Cloud untuk Java yang stabil dan tercantum dalam tabel API yang Didukung mendukung kompilasi gambar native.
Sebelum memulai
Untuk menggunakan kompilasi image native dengan Library Klien Google Cloud untuk Java yang diinginkan, ikuti langkah-langkah prasyarat berikut:
Jika Anda belum melakukannya, buat Google Cloud Project.
Instal Google Cloud CLI, yang memungkinkan Anda menjalankan contoh dengan kredensial project Anda.
Setelah menginstal Google Cloud CLI, login dengan Kredensial Default Aplikasi menggunakan perintah berikut:
gcloud auth application-default loginInstal distribusi JDK yang sesuai seperti GraalVM.
Pastikan Anda telah menginstal ekstensi gambar native dengan menjalankan perintah berikut:
gu install native-imagePastikan versi Java default disetel dengan benar dengan menjalankan
java -versiondi terminal. Outputnya mirip dengan hal berikut ini:java -version openjdk version "17.0.9" 2023-10-17 OpenJDK Runtime Environment GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22) OpenJDK 64-Bit Server VM GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22, mixed mode, sharing)
Membangun aplikasi sebagai image native
Petunjuk berikut menggunakan plugin alat build native untuk membangun aplikasi sebagai image native.
Petunjuk penyiapan Maven
Salin dan tempel teks ini ke POM aplikasi Anda untuk menggunakan plugin Maven native untuk membangun image native aplikasi. Pastikan untuk mengganti MAIN_CLASS dengan nama class utama dan VERSION dengan versi plugin Maven native, seperti
0.10.1.<profiles> <profile> <id>native</id> <build> <plugins> <plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> <version>VERSION</version> <extensions>true</extensions> <configuration> <mainClass>$MAIN_CLASS</mainClass> <buildArgs> <buildArg>--no-fallback</buildArg> <buildArg>--no-server</buildArg> </buildArgs> </configuration> <executions> <execution> <id>build-native</id> <goals> <goal>build</goal> </goals> <phase>package</phase> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>Jalankan
mvn package -Pnativeuntuk membuat gambar native di folder./target.Jalankan aplikasi seperti Anda menjalankan file yang dapat dieksekusi. Misalnya,
./target/$IMAGE_NAME. Plugin ini secara default menggunakan ID artefak project.
Petunjuk penyiapan Gradle
Tetapkan class utama aplikasi Anda dengan menempelkan teks berikut di file
build.gradleAnda.application { mainClass.set('$MAIN_CLASS') }Tambahkan plugin native-gradle seperti yang dijelaskan dalam Menambahkan plugin.
Panggil
./gradlew nativeCompileuntuk membuat gambar native ke dalam direktori./build/native/nativeCompile.Jalankan aplikasi sebagai file yang dapat dieksekusi. Misalnya,
./build/native/nativeCompile/$PROJECT_NAME. Dengan plugin, nama image secara default adalah nama project.
Masalah Umum
Kompatibilitas SLF4J
Jika Anda melakukan kompilasi gambar native di library klien dengan dependensi SLF4J, Anda mungkin melihat error waktu build berikut.
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil.getBoolean(java.lang.String, boolean)
Parsing context:
at io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil.getBoolean(SystemPropertyUtil.java:96)
at io.grpc.netty.shaded.io.netty.channel.epoll.Epoll.<clinit>(Epoll.java:33)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:153)
...
java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: No instances of org.slf4j.jul.JDK14LoggerAdapter are allowed in the image heap as this class should be initialized at image runtime. To see how this object got instantiated use --trace-object-instantiation=org.slf4j.jul.JDK14LoggerAdapter.
Tambahkan --initialize-at-run-time=io.grpc.netty.shaded.io.netty ke file META-INF/native-image/$GROUP_ID/$ARTIFACT_ID/native-image.properties Anda untuk mengatasi masalah ini.
Namun, konfigurasi ini dapat menimbulkan biaya performa untuk gambar native yang dihasilkan, bergantung pada jalur kode yang diikuti aplikasi Anda.
Atau, pertimbangkan untuk menggunakan library logging lain seperti Flogger atau library java.util.logging.
Pertanyaan
Laporkan masalah dan pertanyaan terkait kompilasi image native Java dari halaman masalah GitHub.