{"record":{"id":"b261e825545f06a6","repo":"HMCL-dev/HMCL","slug":"game-processor-dependency-missing-b261e8","errorCode":null,"errorMessage":"Game processor dependency missing","messagePattern":"Game processor dependency missing","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOldInstallTask.java","lineNumber":132,"sourceCode":"                throw new FileNotFoundException(\"Game processor file not found, should be downloaded in preprocess\");\n\n            String mainClass;\n            try (JarFile jarFile = new JarFile(jar.toFile())) {\n                mainClass = jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.MAIN_CLASS);\n            }\n\n            if (StringUtils.isBlank(mainClass))\n                throw new Exception(\"Game processor jar does not have main class \" + jar);\n\n            List<String> command = new ArrayList<>();\n            command.add(JavaRuntime.getDefault().getBinary().toString());\n            command.add(\"-cp\");\n\n            List<String> classpath = new ArrayList<>(processor.getClasspath().size() + 1);\n            for (Artifact artifact : processor.getClasspath()) {\n                Path file = gameRepository.getLayout().getArtifactFile(artifact);\n                if (!Files.isRegularFile(file))\n                    throw new Exception(\"Game processor dependency missing\");\n                classpath.add(file.toString());\n            }\n            classpath.add(jar.toString());\n            command.add(String.join(File.pathSeparator, classpath));\n\n            command.add(mainClass);\n\n            List<String> args = new ArrayList<>(processor.getArgs().size());\n            for (String arg : processor.getArgs()) {\n                String parsed = parseLiteral(arg, vars);\n                if (parsed == null)\n                    throw new ArtifactMalformedException(\"Invalid forge installation configuration\");\n                args.add(parsed);\n            }\n\n            command.addAll(args);\n\n            LOG.info(\"Executing external processor \" + processor.getJar().toString() + \", command line: \" + new CommandBuilder().addAll(command).toString());","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/HMCL-dev/HMCL/blob/24702dc5a0214034f4c27166d5fd30cad08cec19/HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOldInstallTask.java#L114-L150","documentation":"Thrown when one of the processor's declared classpath dependencies (processor.getClasspath() Artifacts) is not a regular file in the game repository. All dependencies must be pre-downloaded during preprocess; a missing one means the processor cannot be launched.","triggerScenarios":"Iterating processor.getClasspath() in ProcessorTask.execute, gameRepository.getLayout().getArtifactFile(artifact) returns a path that is not a regular file — the dependency library was never downloaded, was interrupted mid-download, or was deleted.","commonSituations":"Incomplete library downloads (network failure, disk full, antivirus removal); interrupted previous install attempt; user cleaning libraries folder; mirror missing an artifact.","solutions":["Re-run the installation so GameLibrariesTask re-downloads the missing dependency libraries","Check disk space and permissions in the .minecraft/libraries directory","Check the HMCL log for the earlier download failure of that artifact and fix its root cause (network/mirror)","Delete the partially downloaded/corrupt file so the retry fetches a fresh copy"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for (Artifact a : processor.getClasspath()) {\n    if (!Files.isRegularFile(gameRepository.getLayout().getArtifactFile(a))) reDownloadLibraries();\n}","typeGuard":null,"tryCatchPattern":"try { task.run(); } catch (Exception e) { if (\"Game processor dependency missing\".equals(e.getMessage())) reDownloadLibrariesAndRetry(); else throw e; }","preventionTips":["Run the full library dependency download before processor execution","Ensure sufficient disk space and write permissions","Disable antivirus interference with libraries directory","Retry downloads on transient network failure"],"tags":["java","classpath","download","missing-dependency"],"backgroundTag":"missing-dependency","analyzedSha":"24702dc5a0214034f4c27166d5fd30cad08cec19","analyzedAt":"2026-09-10T12:36:46.680Z","contentChangedAt":"2026-09-10T12:36:46.680Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}