fix java locate errors killing whole java installation

This commit is contained in:
Julian Chang 2026-07-19 07:57:18 +09:00
parent c95e57ef55
commit 46efd39b6a
No known key found for this signature in database
2 changed files with 24 additions and 10 deletions

View file

@ -37,31 +37,39 @@ pub async fn check_java_runtime(absolute_path: String) -> JavaResult<JavaCheckIn
let output = command.output().await
.map_err(|e| JavaError::RuntimeCheckError {
source: e,
path: absolute_path,
path: absolute_path.clone(),
})?;
let java_info = String::from_utf8_lossy(&output.stdout);
let info = java_info
.lines()
.map(|line| {
.filter_map(|line| {
let mut parts = line.splitn(2, '=');
let key = parts.next().unwrap_or("unknown");
let value = parts.next().unwrap_or("unknown");
let key = parts.next()?;
let value = parts.next()?;
(key.to_string(), value.to_string())
Some((key.to_string(), value.to_string()))
})
.collect::<HashMap<_, _>>();
let Some(version) = info.get("java.version").cloned() else {
let stderr = String::from_utf8_lossy(&output.stderr);
tracing::warn!(
path = %absolute_path,
status = ?output.status.code(),
"java probe did not report java.version; stderr: {}",
stderr.trim()
);
return Err(JavaError::InvalidJavaPath { path: absolute_path });
};
Ok(JavaCheckInfo {
os_arch: info
.get("os.arch")
.cloned()
.unwrap_or_else(|| String::from("unknown")),
version: info
.get("java.version")
.cloned()
.unwrap_or_else(|| String::from("unknown")),
version,
vendor: info
.get("java.vendor")
.cloned()

View file

@ -260,7 +260,13 @@ async fn register_located_runtimes(
located: impl IntoIterator<Item = (PathBuf, JavaCheckInfo)>,
) -> LauncherResult<()> {
for (path, info) in located {
let _ = persist_runtime(pool, &path, &info).await?;
if let Err(err) = persist_runtime(pool, &path, &info).await {
tracing::warn!(
path = %path.display(),
version = %info.version,
"skipping located Java runtime: {err}"
);
}
}
Ok(())
}