HMCL-dev/HMCL · error · FileNotFoundException

Game processor file not found, should be downloaded in…

Error message

Game processor file not found, should be downloaded in preprocess

What it means

Thrown as java.io.FileNotFoundException by ProcessorTask.execute when the processor's JAR artifact (processor.getJar(), e.g. the NeoForge installer's toolbox/unpacking processor jar) is not a regular file in the game repository. The preprocess download step (GameLibrariesTask of the install profile) should have downloaded it; this error means that step failed, was skipped, or the file was deleted from the libraries directory.

Solutions

  1. Re-run the NeoForge/Forge installation so the preprocess (GameLibrariesTask) downloads the missing processor jar again
  2. Verify network/mirror availability and retry the download of the version's libraries
  3. Check the file at the path printed in the error under .minecraft/libraries and delete corrupted sibling files so they are re-fetched
  4. Temporarily disable antivirus that may quarantine freshly downloaded jars
  5. Install to a fresh game directory to rule out a corrupted repository
Defensive patterns

Strategy: validation

Validate before calling

Path jar = gameRepository.getLayout().getArtifactFile(processor.getJar());
if (!Files.isRegularFile(jar)) {
    // re-run library download (GameLibrariesTask) before executing processors
}

Try / catch

try { task.run(); } catch (FileNotFoundException e) { if (e.getMessage().contains("Game processor file not found")) reDownloadLibrariesAndRetry(); else throw e; }

Prevention

When it happens

Trigger: NeoForge/Forge (old-style install_profile.json) installation runs ProcessorTask.execute after output checksums were missing/mismatched; gameRepository.getLayout().getArtifactFile(processor.getJar()) does not exist because the preprocess library download failed, was interrupted, or the file was manually deleted.

Common situations: Network failures or antivirus quarantine during library download; corrupted/cleaned .minecraft/libraries directory; retrying an install after a partial download; download mirror missing the processor artifact.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of HMCL-dev/HMCL@24702dc5a0 (2026-09-10). Data as JSON: /api/errors/6878727a66002179. Report an issue: GitHub.

Appendix: source

Thrown at HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOldInstallTask.java:114

                    if (!Objects.equals(code, value)) {
                        Files.delete(artifact);
                        LOG.info("Found existing file is not valid: " + artifact);

                        miss = true;
                    }
                } else {
                    miss = true;
                }
            }

            if (!processor.getOutputs().isEmpty() && !miss) {
                return;
            }

            Path jar = gameRepository.getLayout().getArtifactFile(processor.getJar());
            if (!Files.isRegularFile(jar))
                throw new FileNotFoundException("Game processor file not found, should be downloaded in preprocess");

            String mainClass;
            try (JarFile jarFile = new JarFile(jar.toFile())) {
                mainClass = jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.MAIN_CLASS);
            }

            if (StringUtils.isBlank(mainClass))
                throw new Exception("Game processor jar does not have main class " + jar);

            List<String> command = new ArrayList<>();
            command.add(JavaRuntime.getDefault().getBinary().toString());
            command.add("-cp");

            List<String> classpath = new ArrayList<>(processor.getClasspath().size() + 1);
            for (Artifact artifact : processor.getClasspath()) {
                Path file = gameRepository.getLayout().getArtifactFile(artifact);
                if (!Files.isRegularFile(file))
                    throw new Exception("Game processor dependency missing");

View on GitHub (pinned to 24702dc5a0)