{"record":{"id":"ad3921d7ec0f04cb","repo":"quarkusio/quarkus","slug":"name-is-not-a-valid-package-name","errorCode":null,"errorMessage":"${name} is not a valid package name","messagePattern":"(.+?) is not a valid package name","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateProjectHelper.java","lineNumber":139,"sourceCode":"        }\n        var firstColon = s.indexOf(':');\n        if (firstColon > 0) {\n            var lastColon = s.lastIndexOf(':');\n            return lastColon > 0 && firstColon != lastColon;\n        }\n        return false;\n    }\n\n    public static String checkClassName(String name) {\n        if (!SourceVersion.isName(name)) { // checks for valid identifiers & use of keywords\n            throw new IllegalArgumentException(name + \" is not a valid class name\");\n        }\n        return name;\n    }\n\n    public static String checkPackageName(String name) {\n        if (!SourceVersion.isName(name)) { // checks for valid identifiers & use of keywords\n            throw new IllegalArgumentException(name + \" is not a valid package name\");\n        }\n        return name;\n    }\n\n    public static Path checkProjectRootPath(Path outputPath, String name) {\n        requireNonNull(name, \"Must specify project name\");\n        requireNonNull(outputPath, \"Must specify output path\");\n\n        Path projectRootPath = outputPath.resolve(name);\n        if (projectRootPath.toFile().exists()) {\n            throw new IllegalArgumentException(\n                    \"Target directory already exists: \" + projectRootPath.toAbsolutePath().toString());\n        }\n        return projectRootPath;\n    }\n\n    public static Path createOutputDirectory(String targetDirectory) {\n        Path origin = new File(System.getProperty(\"user.dir\")).toPath();","sourceCodeStart":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateProjectHelper.java#L121-L157","documentation":"checkPackageName validates a proposed Java package name with SourceVersion.isName, rejecting invalid identifiers and keywords. If the value is not a valid (possibly dotted) package name, an IllegalArgumentException with this message is thrown.","triggerScenarios":"Calling CreateProject with a packageName value (or checkPackageName directly) containing invalid characters (underscores-only segments are allowed but hyphens/spaces are not), reserved keywords, or segments starting with digits.","commonSituations":"Users reusing artifactId like 'acme-2fa' as a package; package names with hyphens; Java reserved words such as 'package' or 'int'; numeric-leading segments like '4utils'.","solutions":["Use lowercase, dot-separated valid Java identifiers (e.g. org.acme.util)","Replace hyphens and invalid characters with letters or underscores per segment","Avoid Java reserved keywords in any segment"],"exampleFix":"// before\npackageName(\"com.acme.2fa-tools\")\n// after\npackageName(\"com.acme.twofactor.tools\")","handlingStrategy":"validation","validationCode":"import javax.lang.model.SourceVersion;\nif (name == null || !SourceVersion.isName(name)) throw new IllegalArgumentException(name + \" is not a valid package name\");","typeGuard":null,"tryCatchPattern":"try { helper.checkPackageName(name); } catch (IllegalArgumentException e) { name = name.replace('-', '_'); if (!SourceVersion.isName(name)) throw e; }","preventionTips":["Use lowercase dot-separated identifiers for packages","Never reuse artifactIds with hyphens directly as packages","Validate each dot-separated segment is a valid Java identifier"],"tags":["validation","naming","java"],"backgroundTag":"invalid-package-name","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-15T02:17:10.978Z"}