static async Task DownloadArtifacts(MavenRepository maven, BindingConfig config, Dictionary <string, Project> mavenProjects) { var httpClient = new HttpClient(); foreach (var mavenArtifact in config.MavenArtifacts) { // Skip downloading dependencies if (mavenArtifact.DependencyOnly) { continue; } var version = mavenArtifact.Version; if (!mavenProjects.TryGetValue($"{mavenArtifact.GroupId}/{mavenArtifact.ArtifactId}-{mavenArtifact.Version}", out var mavenProject)) { continue; } var artifactDir = Path.Combine( config.BasePath, config.ExternalsDir, mavenArtifact.GroupId); var artifactFile = Path.Combine(artifactDir, config.DownloadExternalsWithFullName ? $"{mavenArtifact.GroupId}.{mavenArtifact.ArtifactId}.{mavenProject.Packaging}" : $"{mavenArtifact.ArtifactId}.{mavenProject.Packaging}"); var md5File = artifactFile + ".md5"; var sha256File = artifactFile + ".sha256"; var sourcesFile = Path.Combine(artifactDir, config.DownloadExternalsWithFullName ? $"{mavenArtifact.GroupId}.{mavenArtifact.ArtifactId}-sources.jar" : $"{mavenArtifact.ArtifactId}-sources.jar"); var artifactExtractDir = Path.Combine(artifactDir, mavenArtifact.ArtifactId); if (!Directory.Exists(artifactDir)) { Directory.CreateDirectory(artifactDir); } if (!Directory.Exists(artifactExtractDir)) { Directory.CreateDirectory(artifactExtractDir); } var mvnArt = maven.Groups.FirstOrDefault(g => g.Id == mavenArtifact.GroupId)?.Artifacts?.FirstOrDefault(a => a.Id == mavenArtifact.ArtifactId); // Download artifact using (var astrm = await mvnArt.OpenLibraryFile(mavenArtifact.Version, mavenProject.Packaging)) using (var sw = File.Create(artifactFile)) await astrm.CopyToAsync(sw); // Determine MD5 try { // First try download using (var astrm = await mvnArt.OpenLibraryFile(mavenArtifact.Version, mavenProject.Packaging + ".md5")) using (var sw = File.Create(md5File)) await astrm.CopyToAsync(sw); } catch { // Then hash the downloaded artifact using (var file = File.OpenRead(artifactFile)) File.WriteAllText(md5File, Util.HashMd5(file)); } // Determine Sha256 try { // First try download, this almost certainly won't work // but in case Maven ever starts supporting sha256 it should start // they currently support .sha1 so there's no reason to believe the naming // convention should be any different, and one day .sha256 may exist using (var astrm = await mvnArt.OpenLibraryFile(mavenArtifact.Version, mavenProject.Packaging + ".sha256")) using (var sw = File.Create(sha256File)) await astrm.CopyToAsync(sw); } catch { // Create Sha256 hash if we couldn't download using (var file = File.OpenRead(artifactFile)) File.WriteAllText(sha256File, Util.HashSha256(file)); } if (config.DownloadJavaSourceJars) { try { using (var astrm = await maven.OpenArtifactSourcesFile(mavenArtifact.GroupId, mavenArtifact.ArtifactId, version)) using (var sw = File.Create(sourcesFile)) await astrm.CopyToAsync(sw); } catch { } } if (Directory.Exists(artifactExtractDir)) { Directory.Delete(artifactExtractDir, true); } // Unzip artifact into externals if (mavenProject.Packaging.ToLowerInvariant() == "aar") { ZipFile.ExtractToDirectory(artifactFile, artifactExtractDir); } } }
static async Task DownloadArtifacts(MavenRepository maven, BindingConfig config, Dictionary <string, Project> mavenProjects) { var httpClient = new HttpClient(); foreach (var mavenArtifact in config.MavenArtifacts) { // Skip downloading dependencies if (mavenArtifact.DependencyOnly) { continue; } var version = mavenArtifact.Version; if (!mavenProjects.TryGetValue($"{mavenArtifact.GroupId}/{mavenArtifact.ArtifactId}-{mavenArtifact.Version}", out var mavenProject)) { continue; } var artifactDir = Path.Combine( config.BasePath, config.ExternalsDir, mavenArtifact.GroupId); var artifactFile = Path.Combine(artifactDir, $"{mavenArtifact.ArtifactId}.{mavenProject.Packaging}"); var md5File = artifactFile + ".md5"; var sourcesFile = Path.Combine(artifactDir, $"{mavenArtifact.ArtifactId}-sources.jar"); var artifactExtractDir = Path.Combine(artifactDir, mavenArtifact.ArtifactId); if (!Directory.Exists(artifactDir)) { Directory.CreateDirectory(artifactDir); } if (!Directory.Exists(artifactExtractDir)) { Directory.CreateDirectory(artifactExtractDir); } var mvnArt = maven.Groups.FirstOrDefault(g => g.Id == mavenArtifact.GroupId)?.Artifacts?.FirstOrDefault(a => a.Id == mavenArtifact.ArtifactId); // Download artifact using (var astrm = await mvnArt.OpenLibraryFile(mavenArtifact.Version, mavenProject.Packaging)) using (var sw = File.Create(artifactFile)) await astrm.CopyToAsync(sw); // Determine MD5 try { // First try download using (var astrm = await mvnArt.OpenLibraryFile(mavenArtifact.Version, mavenProject.Packaging + ".md5")) using (var sw = File.Create(md5File)) await astrm.CopyToAsync(sw); } catch { // Then hash the downloaded artifact using (var file = File.OpenRead(artifactFile)) File.WriteAllText(md5File, HashMd5(file)); } if (config.DownloadJavaSourceJars) { try { using (var astrm = await maven.OpenArtifactSourcesFile(mavenArtifact.GroupId, mavenArtifact.ArtifactId, version)) using (var sw = File.Create(sourcesFile)) await astrm.CopyToAsync(sw); } catch { } } if (Directory.Exists(artifactExtractDir)) { Directory.Delete(artifactExtractDir, true); } // Unzip artifact into externals if (mavenProject.Packaging.ToLowerInvariant() == "aar") { ZipFile.ExtractToDirectory(artifactFile, artifactExtractDir); } } }