diff --git a/external/Java.Interop b/external/Java.Interop index dba007ba535..70493645c7d 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit dba007ba535f91f522f86039395f7b2a145bc258 +Subproject commit 70493645c7d95648010a4cef948234a28744c03f diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs b/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs index 3e9740609e7..92380901e3d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs @@ -272,7 +272,13 @@ public MSBuildLoggingPomResolver (TaskLoggingHelper logger) try { using (var file = File.OpenRead (filename)) { var project = Project.Load (file); - var registered_artifact = Artifact.Parse (project.VersionedArtifactString); + + // POMs may inherit GroupId/Version from a element, so fall back to + // the parent's values when the project itself doesn't declare them. (Without + // this, building an Artifact would fail validation with an empty coordinate.) + var groupId = project.GroupId.HasValue () ? project.GroupId : (project.Parent?.GroupId ?? ""); + var version = project.Version.HasValue () ? project.Version : (project.Parent?.Version ?? ""); + var registered_artifact = new Artifact (groupId, project.ArtifactId ?? "", version); // Return the registered artifact, preferring any overrides specified in the task item var final_artifact = new Artifact ( diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs b/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs index 96eced16660..f292557b9aa 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs @@ -90,7 +90,7 @@ public async override System.Threading.Tasks.Task RunTaskAsync () var maven_override_filename = item.GetMetadataOrDefault ("ArtifactFilename", null); // Download artifact - var artifact_file = await MavenExtensions.DownloadPayload (repository, artifact, MavenCacheDirectory, maven_override_filename, Log, CancellationToken); + var artifact_file = await MavenExtensions.DownloadPayload (repository, artifact, maven_override_filename, Log, CancellationToken); if (artifact_file is null) return null; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs index 11a68e801fe..4abd9237a1b 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs @@ -130,19 +130,15 @@ public static bool TryParseJavaArtifacts (this ITaskItem task, string type, Task } // Returns artifact output path - public static async Task DownloadPayload (CachedMavenRepository repository, Artifact artifact, string cacheDir, string? mavenOverrideFilename, TaskLoggingHelper log, CancellationToken cancellationToken) + public static async Task DownloadPayload (CachedMavenRepository repository, Artifact artifact, string? mavenOverrideFilename, TaskLoggingHelper log, CancellationToken cancellationToken) { - var output_directory = Path.Combine (cacheDir, repository.Name, artifact.GroupId, artifact.Id, artifact.Version); - - Directory.CreateDirectory (output_directory); - var files_to_check = new List (); if (mavenOverrideFilename.HasValue ()) { - files_to_check.Add (Path.Combine (output_directory, mavenOverrideFilename)); + files_to_check.Add (repository.GetArtifactFilePath (artifact, mavenOverrideFilename)); } else { - files_to_check.Add (Path.Combine (output_directory, $"{artifact.Id}-{artifact.Version}.jar")); - files_to_check.Add (Path.Combine (output_directory, $"{artifact.Id}-{artifact.Version}.aar")); + files_to_check.Add (repository.GetArtifactFilePath (artifact, $"{artifact.Id}-{artifact.Version}.jar")); + files_to_check.Add (repository.GetArtifactFilePath (artifact, $"{artifact.Id}-{artifact.Version}.aar")); } // We don't need to redownload if we already have a cached copy