quarkusio/quarkus · error · RuntimeException
Failed to process
Error message
Failed to process
What it means
Thrown by GradleApplicationModelBuilder.processQuarkusDependency as a RuntimeException wrapping an IOException when the builder tries to open a resolved Quarkus artifact JAR as a ZIP filesystem (ZipUtils.newFileSystem) to read its META-INF extension descriptor and the JAR cannot be read as a zip. The path of the offending artifact is included in the message. It signals a corrupted, unreadable, or non-zip artifact file in the local repository or build output.
Source
Thrown at devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/GradleApplicationModelBuilder.java:561
ProjectDescriptorBuilder.initSourceDirs(project, projectModule);
appDep.setWorkspaceModule(projectModule);
}
appModel.addReloadableWorkspaceModule(appDep.getKey());
}
private boolean processQuarkusDependency(ResolvedDependencyBuilder artifactBuilder, ApplicationModelBuilder modelBuilder) {
for (Path artifactPath : artifactBuilder.getResolvedPaths()) {
if (!Files.exists(artifactPath) || !artifactBuilder.getType().equals(ArtifactCoords.TYPE_JAR)) {
break;
}
if (Files.isDirectory(artifactPath)) {
return processQuarkusDir(artifactBuilder, artifactPath.resolve(BootstrapConstants.META_INF), modelBuilder);
} else {
try (FileSystem artifactFs = ZipUtils.newFileSystem(artifactPath)) {
return processQuarkusDir(artifactBuilder, artifactFs.getPath(BootstrapConstants.META_INF), modelBuilder);
} catch (IOException e) {
throw new RuntimeException("Failed to process " + artifactPath, e);
}
}
}
return false;
}
private static boolean processQuarkusDir(ResolvedDependencyBuilder artifactBuilder, Path quarkusDir,
ApplicationModelBuilder modelBuilder) {
if (!Files.exists(quarkusDir)) {
return false;
}
final Path quarkusDescr = quarkusDir.resolve(BootstrapConstants.DESCRIPTOR_FILE_NAME);
if (!Files.exists(quarkusDescr)) {
return false;
}
final Properties extProps = readDescriptor(quarkusDescr);
if (extProps == null) {
return false;View on GitHub (pinned to e1c734241f)
Solutions
- Delete the corrupted artifact file (path is in the message) from your local repo/cache and rebuild so it re-downloads.
- Verify the file is a valid zip: `unzip -t <artifactPath>`; if invalid, remove it and any sibling *.lastUpdated markers.
- Check network/proxy configuration if downloads keep producing invalid files ( Corporate mirrors returning HTML error pages).
- Free disk space and retry the build if the failure happened during a download.
- Run the build with -e/--stacktrace to see the underlying IOException for a precise cause.
Example fix
# before: build fails with Failed to process /home/me/.m2/repository/io/quarkus/.../quarkus-foo-deployment-3.0.0.jar rm -rf ~/.m2/repository/io/quarkus/ext/quarkus-foo-deployment/3.0.0/ # after: rebuild re-downloads a valid jar
Defensive patterns
Strategy: try-catch
Validate before calling
// Validate artifact integrity before building:
def f = file(artifactPath)
assert f.exists() && f.length() > 0 : "Artifact ${f} is missing or empty"
def proc = ['unzip', '-t', f.absolutePath].execute()
assert proc.waitFor() == 0 : "Artifact ${f} is not a valid zip"
Try / catch
try {
quarkusBuild()
} catch (RuntimeException e) {
if (e.message?.startsWith('Failed to process')) {
def badJar = e.message.minus('Failed to process ')
logger.error("Corrupt artifact ${badJar}; delete it and re-download")
} else throw e
} Prevention
- Use stable network/mirror configuration so downloads never yield truncated or HTML files
- Run `unzip -t` on cached jars in CI when builds fail with IO errors
- Ensure sufficient disk space in CI agents before dependency resolution
- Exclude local repo directories from antivirus real-time scanning on dev machines
When it happens
Trigger: collectDependencies identifies an artifact as a Quarkus extension (via descriptor markers), the artifact file is a directory branch calls processQuarkusDir directly, but the file branch fails ZipUtils.newFileSystem(artifactPath) with an IOException — corrupt/partial JAR, empty file, HTML error page saved as a JAR, or permission problems.
Common situations: Interrupted downloads leaving truncated JARs in ~/.m2/repository or ~/.gradle/caches; proxy/mirror returning error pages stored as JARs; antivirus locking files on Windows; disk-full conditions during dependency download.
Related errors
- Failed to load extension description
- Failed to read
- Failed to open path tree with root %s
- Failed to read %s
- Failed to read resources from classpath
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/d20b80ccc33c9fbd.
Report an issue: GitHub.