{"record":{"id":"6764ed9ad1bb610a","repo":"quarkusio/quarkus","slug":"could-not-create-directory-outputdirectory","errorCode":null,"errorMessage":"Could not create directory ${outputDirectory}","messagePattern":"Could not create directory (.+?)","errorType":"exception","errorClass":"MojoExecutionException","httpStatus":null,"severity":"error","filePath":"devtools/maven/src/main/java/io/quarkus/maven/CreateJBangMojo.java","lineNumber":87,"sourceCode":"\n    @Parameter(defaultValue = \"${repositorySystemSession}\", readonly = true)\n    private RepositorySystemSession repoSession;\n\n    @Parameter(property = \"javaVersion\")\n    private String javaVersion;\n\n    @Component\n    private RepositorySystem repoSystem;\n\n    @Component\n    RemoteRepositoryManager remoteRepoManager;\n\n    @Override\n    public void execute() throws MojoExecutionException {\n        try {\n            Files.createDirectories(outputDirectory.toPath());\n        } catch (IOException e) {\n            throw new MojoExecutionException(\"Could not create directory \" + outputDirectory, e);\n        }\n\n        File projectRoot = outputDirectory;\n        final Path projectDirPath = projectRoot.toPath();\n\n        final MavenArtifactResolver mvn;\n        try {\n            mvn = MavenArtifactResolver.builder()\n                    .setRepositorySystem(repoSystem)\n                    .setRepositorySystemSession(\n                            getLog().isDebugEnabled() ? repoSession : MojoUtils.muteTransferListener(repoSession))\n                    .setRemoteRepositories(repos)\n                    .setRemoteRepositoryManager(remoteRepoManager)\n                    .build();\n        } catch (Exception e) {\n            throw new MojoExecutionException(\"Failed to initialize Maven artifact resolver\", e);\n        }\n","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/maven/src/main/java/io/quarkus/maven/CreateJBangMojo.java#L69-L105","documentation":"CreateJBangMojo.execute() first creates the output directory via Files.createDirectories and wraps any IOException into a MojoExecutionException. The message interpolates the configured ${outputDirectory} property. It means the target directory for the generated JBang project could not be created.","triggerScenarios":"Files.createDirectories(outputDirectory.toPath()) throws IOException — parent path is a file, permissions denied, read-only filesystem, or path too long/invalid.","commonSituations":"-DoutputDirectory pointing inside a read-only mount or container filesystem, a file existing at one of the path segments, permission-restricted corporate machines, typo'd path on Windows (illegal characters).","solutions":["Check that -DoutputDirectory is correct and its parent path exists and is writable","Remove/replace any FILE that occupies a segment of the intended directory path","Fix filesystem permissions (chmod/chown) or pick a writable directory","On Windows verify the path has no illegal characters and isn't exceeding MAX_PATH"],"exampleFix":"// before\nmvn quarkus:create-jbang -DoutputDirectory=/app/out  // /app is read-only\n// after\nmvn quarkus:create-jbang -DoutputDirectory=$HOME/projects/my-jbang-app","handlingStrategy":"validation","validationCode":"java.nio.file.Path out = java.nio.file.Path.of(outputDirectory);\njava.nio.file.Path abs = out.toAbsolutePath();\njava.nio.file.Path existing = abs;\nwhile (existing != null && !java.nio.file.Files.exists(existing)) existing = existing.getParent();\nif (existing == null || !java.nio.file.Files.isDirectory(existing))\n    throw new IllegalStateException(\"A file blocks the path segment: \" + existing);\nif (!java.nio.file.Files.isWritable(existing))\n    throw new IllegalStateException(\"Not writable: \" + existing);","typeGuard":null,"tryCatchPattern":"try {\n    mvn quarkus:create-jbang -DoutputDirectory=...\n} catch (MojoExecutionException e) {\n    if (e.getMessage().startsWith(\"Could not create directory\")) {\n        logger.error(\"Cannot create {}: check permissions / file-vs-dir conflict\", outputDirectory);\n    }\n}","preventionTips":["Pre-create and permission-check the output directory before scaffolding","Never point outputDirectory at a path containing regular files","On Windows, keep paths under MAX_PATH and free of illegal characters"],"tags":["maven","filesystem","io"],"backgroundTag":"directory-creation-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}