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.
Read this as a precise clue about which part of the workflow broke first. Once you know the failing layer, the fix path gets much shorter.
How to Fix It
The fastest fixes here come from checking the immediate failing layer before you change anything unrelated. Make one correction at a time and re-test from the same environment.
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
Usually this comes down to 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, or a cached failed download (*.lastUpdated) is preventing Maven from retrying immediately.
Verify the Fix
Re-run the original Maven goal and confirm the Failed to read artifact descriptor line is gone, and 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.
Prevent It From Coming Back
To prevent this, publish artifacts through a repository manager that enforces complete metadata (POM + checksums), use a single mirror/proxy repository to reduce environment-specific repository differences, and avoid deleting the entire ~/.m2 cache, prefer targeted cleanup of the broken artifact directory.
Docs and source code
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;