apache / apache/maven-resolver

Improve exception message from `ArtifactResolutionException` if multiple remote repos failed to resolve an artifact (for different reasons)

Open
#1,857 4 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Java
Stars
152
Forks
160
Avg merge
1d 4h
Merged PRs (30d)
49

Description

### Affected version

1.9.27 (Maven 3.9.14)

### Bug description

I run into the following exception when trying to resolve an unresolvable artifact (`org.apache.maven.doxia:doxia-core:jar:1.4.0`, only `org.apache.maven.doxia:doxia-core:jar:1.4` exists though) from two remote repos where the domain of a `corporate` one cannot be resolved (only resolvable if connected via VPN):

1. central (https://repo.maven.apache.org/maven2, default, releases),
2. corporate (https://some.internal.corporate.domain/.../, default, releases+snapshots)]

```
org.eclipse.aether.resolution.ArtifactResolutionException: The following artifacts could not be resolved: org.apache.maven.doxia:doxia-core:jar:1.4.0 (absent): Could not transfer artifact org.apache.maven.doxia:doxia-core:jar:1.4.0 from/to corporate (https://some.internal.corporate.domain/.../,): some.internal.corporate.domain: nodename nor servname provided, or not known
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:474)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:261)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:243)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:278)
...
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.maven.doxia:doxia-core:jar:1.4.0 from/to corporate (https://some.internal.corporate.domain/): some.internal.corporate.domain: nodename nor servname provided, or not known
at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:44)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:419)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:260)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:550)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:450)
... 36 more
Caused by: java.net.UnknownHostException: some.internal.corporate.domain: nodename nor servname provided, or not known
at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:52)
at java.base/java.net.InetAddress$PlatformResolver.lookupByName(InetAddress.java:1211)
at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1828)
at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1139)
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1818)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1688)
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.ServiceUnavailableRetryExec.execute(ServiceUnavailableRetryExec.java:85)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.eclipse.aether.transport.http.HttpTransporter.execute(HttpTransporter.java:530)
at org.eclipse.aether.transport.http.HttpTransporter.implGet(HttpTransporter.java:479)
at org.eclipse.aether.spi.connector.transport.AbstractTransporter.get(AbstractTransporter.java:64)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:484)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:416)
... 39 more
```

Although technically correct there is not a single mention that `central` was tried as well and returned a 404.
That would have given a good indication that the Maven coordinates are not the intended ones (because the artifacts is supposed to be available from Central).

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in DefaultArtifactResolver.java, where the stack trace shows artifact resolution and failure aggregation. Reproduce the request against central and the corporate repository, then inspect the existing ArtifactResolutionException formatting. Done means the exception reports the distinct failures from every repository, including central's missing-artifact response and the corporate transfer error.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
build-system, devtools
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.