rewrite
rewrite copied to clipboard
Problem to download netty-transport-native-kqueue dependency
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);
});
}
}