Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }