rewrite icon indicating copy to clipboard operation
rewrite copied to clipboard

Problem to download netty-transport-native-kqueue dependency

Open ashakirin opened this issue 3 years ago • 0 comments

Downloading netty-transport-native-kqueue dependency causes the following error: java.lang.RuntimeException: Error downloading dependnecy: Error downloading dependnecy: /Users/ashakirin/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.75.Final/netty-transport-native-kqueue-4.1.75.Final.jar (No such file or directory)

The reason is that this depedency has OS specific classifier (like osx-x86_64) that is not respected by openrewrite downloader.

Test to reproduce the issue:


import okhttp3.OkHttpClient;
import org.junit.jupiter.api.Test;
import org.openrewrite.InMemoryExecutionContext;
import org.openrewrite.ipc.http.OkHttpSender;
import org.openrewrite.maven.MavenParser;
import org.openrewrite.maven.cache.LocalMavenArtifactCache;
import org.openrewrite.maven.internal.MavenPomDownloader;
import org.openrewrite.maven.tree.MavenResolutionResult;
import org.openrewrite.maven.tree.Pom;
import org.openrewrite.maven.tree.ResolvedDependency;
import org.openrewrite.maven.tree.Scope;
import org.openrewrite.maven.utilities.MavenArtifactDownloader;
import org.openrewrite.xml.tree.Xml;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class OpenrewriteSuffixDependencyTest {

    @Test
    public void suffixDependencyTest() {
        MavenParser parser = MavenParser.builder().build();
        List<Xml.Document> documentList = parser.parse("""
                <?xml version="1.0" encoding="UTF-8"?>
                <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
                    <modelVersion>4.0.0</modelVersion>
                    <groupId>com.example</groupId>
                    <artifactId>explicit-deps-app</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                    <name>explicit-deps-app</name>
                    <description>explicit-deps-app</description>
                    <properties>
                        <java.version>17</java.version>
                        <maven.compiler.source>17</maven.compiler.source>
                        <maven.compiler.target>17</maven.compiler.target>
                    </properties>
                
                    <dependencies>
                        <dependency>
                            <groupId>org.asynchttpclient</groupId>
                            <artifactId>async-http-client</artifactId>
                            <version>2.10.5</version>
                        </dependency>
                        <dependency>
                            <groupId>io.netty</groupId>
                            <artifactId>netty-transport-native-kqueue</artifactId>
                            <version>4.1.75.Final</version>
                        </dependency>
                    </dependencies>
                </project>
                """);

        MavenResolutionResult mavenResolution = MavenBuildFileUtil.getMavenResolution(documentList.get(0));

        Map<Path, Pom> projectPoms = new HashMap<>();
        MavenPomDownloader downloader = new MavenPomDownloader(projectPoms, new InMemoryExecutionContext());
        MavenResolutionResult mavenResolutionResult = mavenResolution.resolveDependencies(downloader, new InMemoryExecutionContext());
        Map<Scope, List<ResolvedDependency>> dependencies = mavenResolutionResult.getDependencies();
        RewriteMavenArtifactDownloader artifactDownloader = new RewriteMavenArtifactDownloader();

        MavenArtifactDownloader mavenArtifactDownloader = new MavenArtifactDownloader(
                new LocalMavenArtifactCache(Paths.get(System.getProperty("user.home"), ".m2", "repository")).orElse(
                        new LocalMavenArtifactCache(Paths.get(System.getProperty("user.home"), ".rewrite", "cache", "artifacts"))
                ),
                null,
                new OkHttpSender(
                        new OkHttpClient.Builder()
                                .retryOnConnectionFailure(true)
                                .connectTimeout(1, TimeUnit.SECONDS)
                                .readTimeout(2, TimeUnit.SECONDS)
                                .build()
                ),
                (t) -> { throw new RuntimeException("Error downloading dependnecy: " + t.getMessage(), t); }
        );
        dependencies.get(Scope.Compile).forEach( d -> {
            Path path = mavenArtifactDownloader.downloadArtifact(d);
            System.out.println(path);
        });
    }
}

ashakirin avatar Sep 16 '22 10:09 ashakirin