Skip to content

Commit 009d2b0

Browse files
committed
Provide MOAR info when a JDK path is invalid
Context: dotnet/android#2004 Sometimes the xamarin-android-tools bump on xamarin-android works. Sometimes it doesn't. (Insert gnashing of teeth and tearing of hair here.) Even "better", the path it's complaining about is entirely non-sensical, and not reproducible except on certain machines: Xamarin.Android.Common.targets(691,2): warning : Not a valid JDK directory: `/var/folders/19/hjm21bn17913_0ck7nh3thdr0000gn/T/tmp731daee6.tmp/microsoft_dist_openjdk_1.8.999` That path *looks* like a path that `AndroidSdkInfoTests.cs` would generate, except that test *isn't executed* -- or built! -- so *where is that path coming from?!* Surely it comes from `AppDomain.GetData()`, says I. So I add some logging to print out the value of the `AppDomain.GetData()` value, and...it has no value. So ***REALLY***, where is `/var/folders/...` coming from? To answer *that* question, update `JdkInfo.TryGetJdkInfo()` to print out a "category" for what directory we're loading. With luck, this bit of contextual information will help us narrow down where it's coming from. Maybe.
1 parent 917d3b3 commit 009d2b0

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

src/Xamarin.Android.Tools.AndroidSdk/JdkInfo.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public static IEnumerable<JdkInfo> GetKnownSystemJdkInfos (Action<TraceLevel, st
229229
static IEnumerable<JdkInfo> GetConfiguredJdks (Action<TraceLevel, string> logger)
230230
{
231231
return GetConfiguredJdkPaths (logger)
232-
.Select (p => TryGetJdkInfo (p, logger))
232+
.Select (p => TryGetJdkInfo (p, logger, "monodroid-config.xml"))
233233
.Where (jdk => jdk != null)
234234
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
235235
}
@@ -246,7 +246,7 @@ static IEnumerable<string> GetConfiguredJdkPaths (Action<TraceLevel, string> log
246246
internal static IEnumerable<JdkInfo> GetMacOSMicrosoftJdks (Action<TraceLevel, string> logger)
247247
{
248248
return GetMacOSMicrosoftJdkPaths ()
249-
.Select (p => TryGetJdkInfo (p, logger))
249+
.Select (p => TryGetJdkInfo (p, logger, "$HOME/Library/Developer/Xamarin/jdk"))
250250
.Where (jdk => jdk != null)
251251
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
252252
}
@@ -265,14 +265,14 @@ static IEnumerable<string> GetMacOSMicrosoftJdkPaths ()
265265
return Directory.EnumerateDirectories (jdks);
266266
}
267267

268-
static JdkInfo TryGetJdkInfo (string path, Action<TraceLevel, string> logger)
268+
static JdkInfo TryGetJdkInfo (string path, Action<TraceLevel, string> logger, string sourceCategory)
269269
{
270270
JdkInfo jdk = null;
271271
try {
272272
jdk = new JdkInfo (path);
273273
}
274274
catch (Exception e) {
275-
logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`");
275+
logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`; via category: {sourceCategory}");
276276
logger (TraceLevel.Verbose, e.ToString ());
277277
}
278278
return jdk;
@@ -290,7 +290,7 @@ static IEnumerable<JdkInfo> GetJavaHomeEnvironmentJdks (Action<TraceLevel, strin
290290
var java_home = Environment.GetEnvironmentVariable ("JAVA_HOME");
291291
if (string.IsNullOrEmpty (java_home))
292292
yield break;
293-
var jdk = TryGetJdkInfo (java_home, logger);
293+
var jdk = TryGetJdkInfo (java_home, logger, "JAVA_HOME");
294294
if (jdk != null)
295295
yield return jdk;
296296
}
@@ -300,7 +300,7 @@ static IEnumerable<JdkInfo> GetLibexecJdks (Action<TraceLevel, string> logger)
300300
{
301301
return GetLibexecJdkPaths (logger)
302302
.Distinct ()
303-
.Select (p => TryGetJdkInfo (p, logger))
303+
.Select (p => TryGetJdkInfo (p, logger, "/usr/libexec/java_home"))
304304
.Where (jdk => jdk != null)
305305
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
306306
}
@@ -339,7 +339,7 @@ static IEnumerable<JdkInfo> GetJavaAlternativesJdks (Action<TraceLevel, string>
339339
{
340340
return GetJavaAlternativesJdkPaths ()
341341
.Distinct ()
342-
.Select (p => TryGetJdkInfo (p, logger))
342+
.Select (p => TryGetJdkInfo (p, logger, "/usr/sbin/update-java-alternatives"))
343343
.Where (jdk => jdk != null);
344344
}
345345

@@ -372,7 +372,7 @@ static IEnumerable<JdkInfo> GetLibJvmJdks (Action<TraceLevel, string> logger)
372372
{
373373
return GetLibJvmJdkPaths ()
374374
.Distinct ()
375-
.Select (p => TryGetJdkInfo (p, logger))
375+
.Select (p => TryGetJdkInfo (p, logger, "/usr/lib/jvm directory listing"))
376376
.Where (jdk => jdk != null)
377377
.OrderByDescending (jdk => jdk, JdkInfoVersionComparer.Default);
378378
}
@@ -394,7 +394,7 @@ static IEnumerable<string> GetLibJvmJdkPaths ()
394394
static IEnumerable<JdkInfo> GetPathEnvironmentJdks (Action<TraceLevel, string> logger)
395395
{
396396
return GetPathEnvironmentJdkPaths ()
397-
.Select (p => TryGetJdkInfo (p, logger))
397+
.Select (p => TryGetJdkInfo (p, logger, "$PATH"))
398398
.Where (jdk => jdk != null);
399399
}
400400

src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ JdkInfo TryGetJdkInfo (string path)
119119
jdk = new JdkInfo (path);
120120
}
121121
catch (Exception e) {
122-
logger (TraceLevel.Warning, e.ToString ());
122+
logger (TraceLevel.Warning, $"Not a valid JDK directory: `{path}`; via category: Windows");
123+
logger (TraceLevel.Verbose, e.ToString ());
123124
}
124125
return jdk;
125126
}

0 commit comments

Comments
 (0)