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

j4rs JvmBuilder

Rustj4rsのJvmBuilderのメモ。


概要

JvmBuilderは、Jvmインスタンスを作るための構造体

use j4rs::JvmBuilder;
    let mut builder = JvmBuilder::new()
        〜
        .build()?;

JvmBuilderのメソッド

JvmBuilderのメソッド(抜粋)。

メソッド 説明
classpath_entry(&mut self, cp_entry: ClasspathEntry) -> &mut JvmBuilder クラスパスにエントリー(ひとつのjarファイル)を追加する。
(→LocalJarArtifact
.classpath_entry(ClasspathEntry::new("/path/to/hoge.jar"))
classpath_entries(&mut self, cp_entries: Vec<ClasspathEntry>) -> &mut JvmBuilder クラスパスに複数のエントリーを追加する。 classpath_entriesの例
java_opt(&mut self, opt: JavaOpt) -> &mut JvmBuilder javaコマンドのオプションを追加する。 .java_opt(JavaOpt::new("-Dhoge=value"))
java_opts(&mut self, opts: Vec<JavaOpt>) -> &mut JvmBuilder javaコマンドのオプションを複数追加する。  
with_maven_settings(&mut self, maven_settings: MavenSettings) Mavenのリポジトリーをセットする。 .with_maven_settings(MavenSettings::new(vec![
MavenArtifactRepo::from("myrepo1::https://my.repo.io/artifacts"),
MavenArtifactRepo::from("myrepo2::https://my.other.repo.io/artifacts")])
)
build(&mut self) -> j4rs::errors::Result<Jvm> Jvmインスタンスを生成する。 let jvm = JvmBuilder::new().〜.build();

JvmBuilderの例

指定されたディレクトリーの下のjarファイルをクラスパスに追加する例

use std::fs;
use std::path::Path;

use j4rs::{errors::J4RsError, ClasspathEntry, JvmBuilder};
    let mut builder = JvmBuilder::new();

    let jar_dir = Path::new("/path/to/jar_dir");
    let jar_files: Vec<String> = find_jar_files(jar_dir);
    let cp_entries: Vec<ClasspathEntry> = jar_files
        .iter()
        .map(|jar| ClasspathEntry::new(jar.as_str()))
        .collect();
    let builder = builder.classpath_entries(cp_entries);

    let jvm = builder.build()?;
fn find_jar_files(path: &Path) -> Vec<String> {
    let mut jar_files = Vec::new();

    if path.is_file() {
        if path.extension().and_then(|s| s.to_str()) == Some("jar") {
            jar_files.push(path.display().to_string());
        }
    } else if path.is_dir() {
        if let Ok(entries) = fs::read_dir(path) {
            for entry in entries {
                let entry = entry.unwrap();
                let entry_path = entry.path();

                if entry_path.is_file()
                    && entry_path.extension().and_then(|s| s.to_str()) == Some("jar")
                {
                    jar_files.push(entry_path.display().to_string());
                }
            }
        }
    }

    jar_files
}

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