S-JIS[2024-09-21] 変更履歴

Rust j4rsメモ

Rustのj4rsクレートのメモ。


概要

j4rs(Java for Rust)はRustからJavaのコードを呼び出すことが出来るクレート(ライブラリー)。

j4rsは内部でJNIを呼び出している。要するにj4rsはJNIのラッパーである。


Cargo.toml:

〜

[dependencies]
j4rs = "0.20.0"

Javaのバージョン

j4rsはJava9以降に対応している。
(Java8でも専用のClassLoaderを指定すれば使えるらしい)

JvmBuilderのbuildメソッドによってJvmインスタンスが生成される。
このとき、JavaVMが作られている。

JavaVMを作る際は、環境変数JAVA_HOMEが設定されているときはその下のjavaコマンドが使われる。
環境変数JAVA_HOMEが設定されていないときは、パスが通っているjavaコマンドが使われる。


src/mrain.rs:

use j4rs::{errors::J4RsError, Instance, InvocationArg, JvmBuilder};
fn main() -> Result<(), J4RsError> {
    let mut builder = JvmBuilder::new();
    let jvm = builder.build()?;

    let system_out: Instance = jvm.static_class_field("java.lang.System", "out")?;	// System.out

    let arg = InvocationArg::try_from("hello, j4rs")?;
    jvm.invoke(&system_out, "println", &[arg])?;		// System.out.println(arg)

    Ok(())
}

まず、JvmBuilderを使ってJvmインスタンスを作る。
JNIを呼び出すメソッドはJvm構造体に定義されているので、それを使う。

Javaのメソッドを呼び出す際の引数はInvocationArg列挙型で指定する。
メソッドの返り値(Javaから返されるインスタンス)はInstance構造体で返される。


Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま