Oracle GraalVM Now Available as a Paketo Buildpack

原文はこちら。
The original article was written by Fabio Niephaus (Researcher on the GraalVM team at Oracle Labs).
https://medium.com/graalvm/oracle-graalvm-now-available-as-a-paketo-buildpack-7b6a7dbb939c

Oracle GraalVMがPaketo buildpackとして利用可能になりました。Paketoチームとともに、Oracle GraalVMをOracle buildpackに統合しました。つまり、Native Image buildpackとOracle buildpackの両方をあなたのビルドパック構成に追加するだけで良いということです!

Paketo Buildpacks
https://paketo.io
A Cloud Native Buildpack that provides the Oracle JDK implementations of JREs and JDKs
https://github.com/paketo-buildpacks/oracle
Java Native Image Buildpack Reference – Paketo Buildpacks
https://paketo.io/docs/reference/java-native-image-reference/

今年初め、私たちは、開発用と本番用の両方で無料で利用できる多くの高度な機能を提供するOracle GraalVMを導入しました。

A New GraalVM Release and New Free License!
https://medium.com/graalvm/a-new-graalvm-release-and-new-free-license-4aab483692f5
https://logico-jp.io/2023/06/15/a-new-graalvm-release-and-new-free-license/

この新しいGraalVMディストリビューションを使用して、より小型で高速なネイティブ・イメージを構築するだけでなく、SBOMを生成したり、G1 GCやPGOなどの他の高度な機能を使用したりすることに、コミュニティで関心が高まっているのは素晴らしいことです。

Using GraalVM Native Image SBOM Support for Vulnerability Scanning
https://medium.com/graalvm/using-graalvm-native-image-sbom-support-for-vulnerability-scanning-4211c747376
https://logico-jp.io/2023/03/05/using-graalvm-native-image-sbom-support-for-vulnerability-scanning/
Memory Management
https://graalvm.org/latest/reference-manual/native-image/optimizations-and-performance/MemoryManagement/
Optimize a Native Executable with Profile-Guided Optimizations
https://graalvm.org/latest/reference-manual/native-image/guides/optimize-native-executable-with-pgo/

Oracle GraalVMは、SDKMAN!、GitHub Action for GraalVM、Script Friendly URL、Homebrew Tap for GraalVMを通じてすでに利用可能です。Buildpackのサポートは強く要望されていたものでしたが、ついに実現しました!

JDK Distributions – SDKMAN! the Software Development Kit Manager
https://sdkman.io/jdks#graal
GitHub Action for GraalVM
https://github.com/marketplace/actions/github-action-for-graalvm
Script Friendly URLs
https://oracle.com/java/technologies/jdk-script-friendly-urls/
Homebrew Tap for GraalVM
https://github.com/graalvm/homebrew-tap

How to build Spring Boot Applications with Oracle GraalVM?

Spring Boot 3.0で、GraalVMを使ったNative Image生成の第1級のサポートが導入されました。

introduced first-class support for generating native images with GraalVM
https://spring.io/blog/2022/11/24/spring-boot-3-0-goes-ga

これにより、Spring Boot 3以後で作成されたアプリケーションはNative Image buildpackを使ってNative Imageを生成できます。Oracle GraalVMを使用するようにビルド・プロセスに指示するには、MavenまたはGradleの設定を微調整するだけです。

Mavenの場合、以下の4行がpom.xmlspring-boot-maven-pluginの構成に入っていることを確認してください。

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <image>
      <!-- ... -->
      <buildpacks>
        <buildpack>docker.io/paketobuildpacks/oracle</buildpack>
        <buildpack>urn:cnb:builder:paketo-buildpacks/java-native-image</buildpack>
      </buildpacks>
    </image>
  </configuration>
</plugin>

Gradle – Groovyを使っている場合、build.gradleに以下の行を追加しましょう。

bootBuildImage {
  buildpacks = ["docker.io/paketobuildpacks/oracle", "urn:cnb:builder:paketo-buildpacks/java-native-image"]
}

Gradle – Kotlinを使っている場合は、以下の行をbuild.gradle.ktsに追加してください。

tasks.getByName<BootBuildImage>("bootBuildImage") {
  buildpacks = listOf("docker.io/paketobuildpacks/oracle", "urn:cnb:builder:paketo-buildpacks/java-native-image")
}

Mavenであれば

./mvnw -Pnative spring-boot:build-image

Gradleであれば

./gradlew bootBuildImage

を実行すると、Oracle GraalVMでのアプリケーションのビルドが始まります。これはビルドログを見て検証できます。 “Oracle GraalVM”という文字がベンダーパージョンに現れるはずです。 

...
[creator] =================================================================
[creator] GraalVM Native Image: Generating 'MyApplication' (executable)...
[creator] =================================================================
[creator] For detailed information and explanations on the build output, visit:
[creator] https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md
[creator] -----------------------------------------------------------------
[creator]  [1/8] Initializing...                            (4.1s @ 0.18GB)
[creator]   Java version: 21.0.1+12, vendor version: Oracle GraalVM 21.0.1+12.1
...

もちろん、Spring BootアプリケーションをOracle GraalVMでビルドできる、ということだけがアップデートされたOracle buildpackでできること、というわけではありません。Paketoのドキュメントには様々な例が上がっており、この中ではGraalVM Native Imageをbuildpackでビルドする方法が紹介されています。

How to Build Java Apps with Paketo Buildpacks
https://paketo.io/docs/howto/java/#build-an-app-as-a-graalvm-native-image-application

Oracle GraalVM上でJavaアプリケーションをGraal JITで実行するコンテナーの作成に関心がある場合、(現在はまだ不可能ですが)ロードマップに上がっています。

Add Oracle GraalVM by dmikusa · Pull Request #144
https://github.com/paketo-buildpacks/oracle/pull/144#issuecomment-1843489967

Wrapping Up

Oracle GraalVMがbuildpackとして利用できるようになったことを、私たちと同じように喜んでいただけることを願っています!これはPaketoチームの助けなしには不可能でした。彼らに心から感謝します!

詳細はPaketoブログのアナウンスを見てください。

Oracle GraalVM Support has Arrived!
https://blog.paketo.io/posts/oracle-graalvm-support-has-arrived/

また、ご興味のある方は、追加情報を含むRFCをこちらでご覧ください。

Proposal to add Oracle GraalVM and update GraalVM CE buildpack by fniephaus · Pull Request #294
https://github.com/paketo-buildpacks/rfcs/pull/294

統合の実装はこのプルリクエストにあります。

Add Oracle GraalVM by dmikusa · Pull Request #144
https://github.com/paketo-buildpacks/oracle/pull/144

また、ユーザーの皆様からのフィードバックはいつでも歓迎しますので、提案やアイデアがあればSlackやGitHub、X/Twitterで共有してください。

Slack invitation
https://www.graalvm.org/slack-invitation
GitHub Issues
https://github.com/oracle/graal
X/Twitter
https://twitter.com/graalvm

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください