ハマってガチャガチャしたので間違いあるかもしれないけどメモ。
まずjavaをインストール。入れるのは default-jdk
のほうがいい気もする。
$ sudo apt install openjdk-9-jre-headless $ sudo apt install openjdk-9-jdk-headless
jvm
パッケージを入れるのに必要と思われる環境変数。
$ export JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64 $ export LD_LIBRARY_PATH=/usr/lib/jvm/java-9-openjdk-amd64/lib/amd64/server
jni
パッケージのために stack.yaml
へパスを追加。
extra-include-dirs: - /usr/lib/jvm/java-9-openjdk-amd64/include/linux - /usr/lib/jvm/java-9-openjdk-amd64/include extra-lib-dirs: - /usr/lib/jvm/java-9-openjdk-amd64/lib/amd64/server
stack build inline-java
してビルドする環境が整ったことを確認。
サンプルは依存パッケージに inline-java
と jvm
を入れて、以下のような感じで。 DataKinds
がいつの間にか必要になってたようだったので加えた。
{-# LANGUAGE DataKinds #-} {-# LANGUAGE QuasiQuotes #-} {-# OPTIONS_GHC -fplugin=Language.Java.Inline.Plugin #-} import Language.Java (withJVM) import Language.Java.Inline main :: IO () main = withJVM [] [java| { System.out.println("Hello Java!"); } |]
実行。
$ stack exec java-sample Hello Java!