PatchBukkit/rust/build/java.rs
Alexander Medvedev 765ffc3cf7 fix: ci 2
2026-07-30 21:22:18 +02:00

82 lines
2.6 KiB
Rust

use std::{fs, path::PathBuf};
use j4rs::{JvmBuilder, MavenArtifactRepo, MavenSettings};
pub fn setup_java(base: PathBuf) {
let resources = base.join("resources");
let deps = resources.join("deps");
let mut java_path = base.clone();
java_path.pop();
let java_path = java_path.join("java");
let patchbukkit_jar = java_path
.join("patchbukkit")
.join("build")
.join("libs")
.join("patchbukkit.jar");
let jassets = resources.join("jassets");
let mut classpath_entries = Vec::new();
if let Ok(entries) = fs::read_dir(&jassets) {
for entry in entries.flatten() {
let path = entry.path();
if let Some(filename) = path.file_name().and_then(|n| n.to_str()) {
if filename.starts_with("j4rs") && filename.ends_with(".jar") {
classpath_entries.push(j4rs::ClasspathEntry::new(&path));
}
}
}
}
let mut jvm_builder = JvmBuilder::new();
let mut jvm_builder = jvm_builder
.with_maven_settings(MavenSettings::new(vec![MavenArtifactRepo::from(
"papermc::https://repo.papermc.io/repository/maven-public/",
)]))
.skip_setting_native_lib()
.with_base_path(&resources)
.java_opts(vec![
j4rs::JavaOpt::new("--enable-native-access=ALL-UNNAMED"),
j4rs::JavaOpt::new("-Dcom.google.protobuf.useUnsafe=false"),
]);
for entry in classpath_entries {
jvm_builder = jvm_builder.classpath_entry(entry);
}
let _jvm = jvm_builder
.build()
.map_err(|err| format!("jvm failed to init: {err:?}"))
.unwrap();
if !&patchbukkit_jar.exists() {
panic!(
"Failed to find patchbukkit.jar, build the java library first by running `gradle build` in the java directory!"
);
}
fs::create_dir_all(&jassets).unwrap();
let dest_jar = jassets.join("patchbukkit.jar");
fs::copy(&patchbukkit_jar, &dest_jar)
.map_err(|err| format!("Failed to copy patchbukkit.jar to jassets: {err:?}"))
.unwrap();
let cdylib = std::env::var("CARGO_CDYLIB_FILE_J4RS").unwrap();
let cdylib = PathBuf::from(cdylib);
let mut cdylib_to = deps;
fs::create_dir_all(&cdylib_to).unwrap();
let original_name = cdylib.file_name().unwrap().to_string_lossy();
let stem = original_name.split('-').next().unwrap(); // before the first '-'
let ext = cdylib.extension().unwrap().to_string_lossy();
cdylib_to.push(format!("{stem}.{ext}"));
fs::copy(&cdylib, &cdylib_to)
.map_err(|err| format!("Failed to copy j4rs native lib: {err:?}"))
.unwrap();
}