ClojureをGraalVMを使用してネイティブバイナリにコンパイルする
clojureにechoコマンドを書き、GraalVMでネイティブバイナリにコンパイルします.
まず第一に.プロジェクトディレクトリエコー
ビルドを追加します.プロジェクトのルートディレクトリへのclj.このファイルには、Java jarをビルドするロジックが含まれています
ネイティブスクリプトをビルドするには、COMを追加する必要があります.ギタブ.ライブラリの自動化宣言への依存性としてのCLJ Easy/Garalビルド時間 — イニシアチブ
バイナリをテストしましょう
🥇 セットアップ
まず第一に.プロジェクトディレクトリエコー
mkdir /tmp/echo
基本的なdepsを追加します.エデン{:paths ["src"]
:deps {org.clojure/clojure {:mvn/version "1.11.0"}}}
src/echo/mainを作成します.CLJ .これは私たちのエントリポイントです.(ns echo.main)
(defn -main [& args]
(apply println args))
clj - m - m echoを実行します.すべてがうまく動くことを確認するメインclj -M -m echo.main foo bar
foo bar
🥈 ビルドuberjar
ビルドを追加します.プロジェクトのルートディレクトリへのclj.このファイルには、Java jarをビルドするロジックが含まれています
(ns build
(:require [clojure.tools.build.api :as b]))
(def class-dir "target/classes")
(def basis (b/create-basis {:project "deps.edn"}))
(def jar-file "target/echo.jar")
(defn clean [_]
(b/delete {:path "target"}))
(defn uberjar [_]
(clean nil)
(b/copy-dir {:src-dirs ["src"]
:target-dir class-dir})
(b/compile-clj {:basis basis
:src-dirs ["src"]
:class-dir class-dir})
(b/uber {:class-dir class-dir
:uber-file jar-file
:basis basis
:main 'echo.main }))
さあ、tools.buildを追加しましょう.エデン{:paths ["src"]
:deps {org.clojure/clojure {:mvn/version "1.11.0"}}
:aliases {:build
{:deps
{io.github.clojure/tools.build {:git/tag "v0.8.1" :git/sha "7d40500"}}
:ns-default build}} }
そして最後のことは私たちのエコーをマークすることです.メインクラスとして(ns echo.main
(:gen-class))
(defn -main [& args]
(apply println args))
Uberjarをビルドする準備ができましたclj -T:build uberjar
このコマンドは、ターゲットフォルダにjarファイルを作成します.Javaで実行できますjava -jar target/echo.jar foo bar
foo bar
🥉 ビルドネイティブ
ネイティブスクリプトをビルドするには、COMを追加する必要があります.ギタブ.ライブラリの自動化宣言への依存性としてのCLJ Easy/Garalビルド時間 — イニシアチブ
{:paths ["src"]
:deps {org.clojure/clojure {:mvn/version "1.11.0"}
com.github.clj-easy/graal-build-time {:mvn/version "0.1.4"}}
:aliases
{:build
{:deps
{io.github.clojure/tools.build {:git/tag "v0.8.1" :git/sha "7d40500"}}
:ns-default build}}}
再構築瓶clj -T:build uberjar
そして、バイナリを作るためにネイティブイメージを走らせる準備ができていますnative-image -jar target/echo.jar --no-fallback --no-server target/echo
このコマンドはjarからtarget/echoへのネイティブバイナリを生成しますバイナリをテストしましょう
./target/echo foo bar
終わり🎉Reference
この問題について(ClojureをGraalVMを使用してネイティブバイナリにコンパイルする), 我々は、より多くの情報をここで見つけました https://dev.to/maksimrv/compile-clojure-to-native-binary-using-graalvm-1a1kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol