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

  1. Delete the corrupted artifact file (path is in the message) from your local repo/cache and rebuild so it re-downloads.
  2. Verify the file is a valid zip: `unzip -t <artifactPath>`; if invalid, remove it and any sibling *.lastUpdated markers.
  3. Check network/proxy configuration if downloads keep producing invalid files ( Corporate mirrors returning HTML error pages).
  4. Free disk space and retry the build if the failure happened during a download.
  5. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/d20b80ccc33c9fbd. Report an issue: GitHub.