fix java locate errors killing whole java installation
This commit is contained in:
parent
c95e57ef55
commit
46efd39b6a
2 changed files with 24 additions and 10 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue