diff --git a/src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs b/src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs index 9cf7fb6..8aad2d2 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs @@ -16,6 +16,8 @@ public class JdkInfo { public string HomePath {get;} + public string Locator {get;} + public string JarPath {get;} public string JavaPath {get;} public string JavacPath {get;} @@ -76,9 +78,15 @@ public JdkInfo (string homePath) javaVersion = new Lazy (GetJavaVersion, LazyThreadSafetyMode.ExecutionAndPublication); } + public JdkInfo (string homePath, string locator) + : this (homePath) + { + Locator = locator; + } + public override string ToString() { - return $"JdkInfo(Version={Version}, Vendor=\"{Vendor}\", HomePath=\"{HomePath}\")"; + return $"JdkInfo(Version={Version}, Vendor=\"{Vendor}\", HomePath=\"{HomePath}\", Locator=\"{Locator}\")"; } public bool GetJavaSettingsPropertyValues (string key, out IEnumerable value) @@ -229,7 +237,7 @@ public static IEnumerable GetKnownSystemJdkInfos (Action GetConfiguredJdks (Action logger) { return GetConfiguredJdkPaths (logger) - .Select (p => TryGetJdkInfo (p, logger)) + .Select (p => TryGetJdkInfo (p, logger, "monodroid-config.xml")) .Where (jdk => jdk != null) .OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default); } @@ -246,7 +254,7 @@ static IEnumerable GetConfiguredJdkPaths (Action log internal static IEnumerable GetMacOSMicrosoftJdks (Action logger) { return GetMacOSMicrosoftJdkPaths () - .Select (p => TryGetJdkInfo (p, logger)) + .Select (p => TryGetJdkInfo (p, logger, "$HOME/Library/Developer/Xamarin/jdk")) .Where (jdk => jdk != null) .OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default); } @@ -265,14 +273,14 @@ static IEnumerable GetMacOSMicrosoftJdkPaths () return Directory.EnumerateDirectories (jdks); } - static JdkInfo TryGetJdkInfo (string path, Action logger) + static JdkInfo TryGetJdkInfo (string path, Action logger, string locator) { JdkInfo jdk = null; try { - jdk = new JdkInfo (path); + jdk = new JdkInfo (path, locator); } catch (Exception e) { - logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`"); + logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`; via locator: {locator}"); logger (TraceLevel.Verbose, e.ToString ()); } return jdk; @@ -290,7 +298,7 @@ static IEnumerable GetJavaHomeEnvironmentJdks (Action GetLibexecJdks (Action logger) { return GetLibexecJdkPaths (logger) .Distinct () - .Select (p => TryGetJdkInfo (p, logger)) + .Select (p => TryGetJdkInfo (p, logger, "`/usr/libexec/java_home -X`")) .Where (jdk => jdk != null) .OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default); } @@ -339,7 +347,7 @@ static IEnumerable GetJavaAlternativesJdks (Action { return GetJavaAlternativesJdkPaths () .Distinct () - .Select (p => TryGetJdkInfo (p, logger)) + .Select (p => TryGetJdkInfo (p, logger, "`/usr/sbin/update-java-alternatives -l`")) .Where (jdk => jdk != null); } @@ -372,7 +380,7 @@ static IEnumerable GetLibJvmJdks (Action logger) { return GetLibJvmJdkPaths () .Distinct () - .Select (p => TryGetJdkInfo (p, logger)) + .Select (p => TryGetJdkInfo (p, logger, "`ls /usr/lib/jvm/*`")) .Where (jdk => jdk != null) .OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default); } @@ -394,7 +402,7 @@ static IEnumerable GetLibJvmJdkPaths () static IEnumerable GetPathEnvironmentJdks (Action logger) { return GetPathEnvironmentJdkPaths () - .Select (p => TryGetJdkInfo (p, logger)) + .Select (p => TryGetJdkInfo (p, logger, "$PATH")) .Where (jdk => jdk != null); } diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs index 32a0bdc..f05a5b6 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs @@ -112,28 +112,29 @@ protected override string GetJavaSdkPath () internal static IEnumerable GetJdkInfos (Action logger) { - JdkInfo TryGetJdkInfo (string path) + JdkInfo TryGetJdkInfo (string path, string locator) { JdkInfo jdk = null; try { - jdk = new JdkInfo (path); + jdk = new JdkInfo (path, locator); } catch (Exception e) { - logger (TraceLevel.Warning, e.ToString ()); + logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`; via category: {locator}"); + logger (TraceLevel.Verbose, e.ToString ()); } return jdk; } - IEnumerable ToJdkInfos (IEnumerable paths) + IEnumerable ToJdkInfos (IEnumerable paths, string locator) { - return paths.Select (TryGetJdkInfo) + return paths.Select (p => TryGetJdkInfo (p, locator)) .Where (jdk => jdk != null) .OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default); } - return ToJdkInfos (GetPreferredJdkPaths ()) - .Concat (ToJdkInfos (GetOpenJdkPaths ())) - .Concat (ToJdkInfos (GetOracleJdkPaths ())); + return ToJdkInfos (GetPreferredJdkPaths (), "Preferred Registry") + .Concat (ToJdkInfos (GetOpenJdkPaths (), "OpenJDK")) + .Concat (ToJdkInfos (GetOracleJdkPaths (), "Oracle JDK")); } private static IEnumerable GetPreferredJdkPaths ()