GraalVM을 사용하여 Clojure를 네이티브 바이너리로 컴파일
🥇 설정
가장 먼저. 프로젝트 디렉토리 에코 만들기
mkdir /tmp/echo
기본 deps.edn 추가
{: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.main을 실행하여 모두 제대로 작동하는지 확인합니다.
clj -M -m echo.main foo bar
foo bar
🥈 uberjar 빌드
프로젝트의 루트 디렉터리에 build.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 }))
이제 deps.edn에 tools.build 및 :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}} }
마지막으로 echo.main을 :gen-class로 표시합니다.
(ns echo.main
(:gen-class))
(defn -main [& args]
(apply println args))
이제 우리는 uberjar를 만들 준비가 되었습니다.
clj -T:build uberjar
이 명령은 대상 폴더에 jar 파일을 만듭니다. 자바로 실행할 수 있습니다.
java -jar target/echo.jar foo bar
foo bar
🥉 네이티브 빌드
네이티브 스크립트를 빌드하려면 라이브러리 선언을 자동화하기 위해 com.github.clj-easy/graal-build-time을 종속성으로 추가한 후 설치해야 합니다._ — initialize-at-build-time_
{: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
이 문제에 관하여(GraalVM을 사용하여 Clojure를 네이티브 바이너리로 컴파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maksimrv/compile-clojure-to-native-binary-using-graalvm-1a1k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)