What This Error Means
Maven could not download or parse the POM for a dependency/plugin, so it cannot resolve that artifact's transitive dependencies.
How to Fix It
Read the innermost cause in the Maven output to see whether this is not found, unauthorized, TLS, or a network transfer failure.
If the POM is missing, fix the publication upstream (re-publish the artifact with its POM) or correct the coordinates in your pom.xml.
If the POM should be in a private repository, add/configure that repository (prefer a mirror in settings.xml) and ensure credentials are set under <servers>.
If the error was cached, force updates once:mvn -U -DskipTests package
Delete the affected artifact directory (or just *.lastUpdated) under ~/.m2/repository/<groupId path>/<artifactId>/, then retry the build.
If the failure is network/proxy/TLS related, fix connectivity first, then rerun the original Maven command.
Why It Happens
The repository is unreachable (DNS, firewall, proxy, VPN, outage).
The repository requires authentication (401/403) but Maven is not sending valid credentials.
The artifact exists, but its POM was never published (broken/partial release) or the coordinates are wrong.
A cached failed download (*.lastUpdated) is preventing Maven from retrying immediately.
How to Verify
Re-run the original Maven goal and confirm the Failed to read artifact descriptor line is gone.
Run mvn -q -DskipTests dependency:tree and confirm Maven can resolve the previously failing artifact.
Manual descriptor download checks
Copy the failing coordinates from the error and fetch the POM directly (replace coordinates):mvn -q -Dartifact=groupId:artifactId:pom:version dependency:get
Print effective settings (mirrors/proxies/servers):mvn -q help:effective-settings
Force a re-check of remote metadata once:mvn -U -DskipTests package
If you suspect caching, delete *.lastUpdated files under the affected artifact directory in ~/.m2/repository/ and retry.
Examples
[ERROR] Failed to read artifact descriptor for org.example:lib:jar:1.2.3: Could not transfer artifact org.example:lib:pom:1.2.3 from/to central (https://repo.maven.apache.org/maven2): transfer failed for https://repo.maven.apache.org/maven2/org/example/lib/1.2.3/lib-1.2.3.pom
[ERROR] Failed to read artifact descriptor for org.example:lib:jar:1.2.3: Could not find artifact org.example:lib:pom:1.2.3 in central (https://repo.maven.apache.org/maven2) What an artifact descriptor is
For most artifacts, the "descriptor" is the artifact's POM file.
Maven needs the POM to determine packaging, dependencies, dependencyManagement, relocations, and repository metadata.
If the POM cannot be downloaded (network/auth/TLS) or does not exist, Maven cannot continue resolving the graph.
Prevention Tips
Publish artifacts through a repository manager that enforces complete metadata (POM + checksums).
Use a single mirror/proxy repository to reduce environment-specific repository differences.
Avoid deleting the entire ~/.m2 cache, prefer targeted cleanup of the broken artifact directory.
Where This Can Be Triggered
github.com/apache/maven/blob/maven-3.9.6/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
When dependency collection fails, Maven rethrows a DependencyResolutionException that includes the underlying resolver exception message (often containing "Failed to read artifact descriptor for ..."). - GitHub
String msg = "Could not resolve dependencies for project " + project.getId() + ": " + e.getMessage();
DependencyResolutionException dex = new DependencyResolutionException(msg, e);
dex.setResult(e.getResult());
throw dex;