Error Knowledge Base MAVEN FAILED_TO_READ_ARTIFACT_DESCRIPTOR

Failed to read artifact descriptor for <artifact>

Maven could not download or parse the POM for a dependency/plugin, so it cannot resolve that artifact's transitive dependencies.

Affected versions: All supported Apache Maven versions.

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

  1. Read the innermost cause in the Maven output to see whether this is not found, unauthorized, TLS, or a network transfer failure.
  2. If the POM is missing, fix the publication upstream (re-publish the artifact with its POM) or correct the coordinates in your pom.xml.
  3. 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>.
  4. If the error was cached, force updates once: mvn -U -DskipTests package.
  5. Delete the affected artifact directory (or just *.lastUpdated) under ~/.m2/repository/<groupId path>/<artifactId>/, then retry the build.
  6. 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

  1. Re-run the original Maven goal and confirm the Failed to read artifact descriptor line is gone.
  2. Run mvn -q -DskipTests dependency:tree and confirm Maven can resolve the previously failing artifact.

Manual descriptor download checks

  1. Copy the failing coordinates from the error and fetch the POM directly (replace coordinates): mvn -q -Dartifact=groupId:artifactId:pom:version dependency:get.
  2. Print effective settings (mirrors/proxies/servers): mvn -q help:effective-settings.
  3. Force a re-check of remote metadata once: mvn -U -DskipTests package.
  4. If you suspect caching, delete *.lastUpdated files under the affected artifact directory in ~/.m2/repository/ and retry.

Common CLI Output

[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

  1. For most artifacts, the "descriptor" is the artifact's POM file.
  2. Maven needs the POM to determine packaging, dependencies, dependencyManagement, relocations, and repository metadata.
  3. 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;

Need help or found a mistake? Contact RepoFlow support for questions.

Join our mailing list