| 306 | } |
| 307 | |
| 308 | fn find_java_binary(root: &Path) -> Option<PathBuf> { |
| 309 | let java_binary = if OS == "windows" { "java.exe" } else { "java" }; |
| 310 | for entry in WalkDir::new(root).into_iter().flatten() { |
| 311 | let path = entry.path(); |
| 312 | if path.is_file() |
| 313 | && path |
| 314 | .file_name() |
| 315 | .map(|name| name.eq_ignore_ascii_case(java_binary)) |
| 316 | .unwrap_or(false) |
| 317 | && path |
| 318 | .parent() |
| 319 | .and_then(|parent| parent.file_name()) |
| 320 | .map(|name| name.eq_ignore_ascii_case("bin")) |
| 321 | .unwrap_or(false) |
| 322 | { |
| 323 | return Some(path.to_path_buf()); |
| 324 | } |
| 325 | } |
| 326 | None |
| 327 | } |
| 328 | |
| 329 | fn read_java_version(java_path: &Path) -> Result<Option<String>, Error> { |
| 330 | let output = Command::new(java_path).arg("-version").output()?; |