namespace ZA.CoreService.ESBCertificateManager.Services;
///
/// Findet eine nutzbare Java-8-Runtime für Sonic MfApi.
///
public static class JavaRuntimeLocator
{
public static string? Resolve(
string? configuredPath = null)
{
foreach (string? candidate in EnumerateCandidates(configuredPath))
{
if (string.IsNullOrWhiteSpace(candidate))
{
continue;
}
string? resolved = TryResolveExisting(candidate);
if (resolved is not null)
{
return resolved;
}
}
return null;
}
private static IEnumerable EnumerateCandidates(
string? configuredPath)
{
if (!string.IsNullOrWhiteSpace(configuredPath))
{
yield return configuredPath.Trim();
}
yield return
@"C:\Program Files (x86)\Java\jre1.8.0_481\bin\java.exe";
yield return
@"C:\Program Files (x86)\Java\jre1.8.0_501\bin\java.exe";
yield return
@"C:\Program Files\Java\jre1.8.0_481\bin\java.exe";
yield return
@"C:\Program Files (x86)\Common Files\Oracle\Java\java8path\java.exe";
foreach (string root in new[]
{
@"C:\Program Files (x86)\Java",
@"C:\Program Files\Java"
})
{
if (!Directory.Exists(root))
{
continue;
}
foreach (string directory in Directory
.EnumerateDirectories(root, "jre1.8*")
.OrderByDescending(path => path, StringComparer.OrdinalIgnoreCase))
{
yield return Path.Combine(directory, "bin", "java.exe");
}
foreach (string directory in Directory
.EnumerateDirectories(root, "jdk1.8*")
.OrderByDescending(path => path, StringComparer.OrdinalIgnoreCase))
{
yield return Path.Combine(directory, "bin", "java.exe");
}
}
string? javaHome =
Environment.GetEnvironmentVariable("JAVA_HOME");
if (!string.IsNullOrWhiteSpace(javaHome))
{
yield return Path.Combine(
javaHome.Trim(),
"bin",
"java.exe");
}
string? jreHome =
Environment.GetEnvironmentVariable("JRE_HOME");
if (!string.IsNullOrWhiteSpace(jreHome))
{
yield return Path.Combine(
jreHome.Trim(),
"bin",
"java.exe");
}
yield return "java.exe";
}
private static string? TryResolveExisting(string candidate)
{
try
{
string resolved =
Path.IsPathRooted(candidate)
? Path.GetFullPath(candidate)
: Path.GetFullPath(
Path.Combine(
AppContext.BaseDirectory,
candidate));
return File.Exists(resolved)
? resolved
: null;
}
catch
{
return null;
}
}
}