You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2026/08/31 15:52:23 UTC

(maven) branch master updated: Document illegal windows filesystem characters (#12974)

This is an automated email from the ASF dual-hosted git repository.

elharo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 24d371b52b Document illegal windows filesystem characters (#12974)
24d371b52b is described below

commit 24d371b52b97387854771c9cfcd009474bce2086
Author: Elliotte Rusty Harold <el...@users.noreply.github.com>
AuthorDate: Mon Aug 31 15:52:16 2026 +0000

    Document illegal windows filesystem characters (#12974)
    
    * Expand documentation
    
    * address claude comments
    
    * spotless
---
 .../apache/maven/model/validation/DefaultModelValidator.java | 10 +++++-----
 .../maven/settings/validation/DefaultSettingsValidator.java  | 11 ++++++++---
 .../java/org/apache/maven/impl/DefaultSettingsValidator.java |  6 +++---
 .../org/apache/maven/impl/model/DefaultModelValidator.java   | 12 +++++++-----
 4 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/compat/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java b/compat/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
index 61abb35d8d..2f0af6cb44 100644
--- a/compat/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
+++ b/compat/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
@@ -82,13 +82,13 @@ public class DefaultModelValidator implements ModelValidator {
     private static final Pattern CI_FRIENDLY_EXPRESSION = Pattern.compile("\\$\\{(.+?)}");
     private static final Pattern EXPRESSION_PROJECT_NAME_PATTERN = Pattern.compile("\\$\\{(project.+?)}");
 
-    private static final String ILLEGAL_FS_CHARS = "\\/:\"<>|?*";
+    private static final String ILLEGAL_NTFS_FILENAME_CHARS = "\\/:\"<>|?*";
 
-    private static final String ILLEGAL_RELATIVE_PATH_CHARS = ":\"<>|?*";
+    private static final String ILLEGAL_WINDOWS_PATH_CHARS = ":\"<>|?*";
 
-    private static final String ILLEGAL_VERSION_CHARS = ILLEGAL_FS_CHARS;
+    private static final String ILLEGAL_VERSION_CHARS = ILLEGAL_NTFS_FILENAME_CHARS;
 
-    private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_FS_CHARS;
+    private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_NTFS_FILENAME_CHARS;
 
     private static final String EMPTY = "";
 
@@ -175,7 +175,7 @@ public void validateRawModel(Model m, ModelBuildingRequest request, ModelProblem
                         parent.getRelativePath(),
                         null,
                         parent,
-                        ILLEGAL_RELATIVE_PATH_CHARS);
+                        ILLEGAL_WINDOWS_PATH_CHARS);
             }
 
             // [MNG-6074] Maven should produce an error if no model version has been set in a POM file used to build an
diff --git a/compat/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java b/compat/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
index 8e497d6b40..e274a2887f 100644
--- a/compat/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
+++ b/compat/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
@@ -46,7 +46,7 @@ public class DefaultSettingsValidator implements SettingsValidator {
     private static final String ID = "[\\w.-]+";
     private static final Pattern ID_REGEX = Pattern.compile(ID);
 
-    private static final String ILLEGAL_REPO_ID_CHARS = "\\/:\"<>|?*"; // ILLEGAL_FS_CHARS
+    private static final String ILLEGAL_NTFS_FILENAME_CHARS = "\\/:\"<>|?*";
 
     @Override
     public void validate(Settings settings, SettingsProblemCollector problems) {
@@ -119,7 +119,12 @@ public void validate(Settings settings, SettingsProblemCollector problems) {
                 validateStringNotEmpty(problems, "mirrors.mirror.id", mirror.getId(), mirror.getUrl());
 
                 validateBannedCharacters(
-                        problems, "mirrors.mirror.id", Severity.WARNING, mirror.getId(), null, ILLEGAL_REPO_ID_CHARS);
+                        problems,
+                        "mirrors.mirror.id",
+                        Severity.WARNING,
+                        mirror.getId(),
+                        null,
+                        ILLEGAL_NTFS_FILENAME_CHARS);
 
                 if ("local".equals(mirror.getId())) {
                     addViolation(
@@ -187,7 +192,7 @@ private void validateRepositories(SettingsProblemCollector problems, List<Reposi
             validateStringNotEmpty(problems, prefix + ".id", repository.getId(), repository.getUrl());
 
             validateBannedCharacters(
-                    problems, prefix + ".id", Severity.WARNING, repository.getId(), null, ILLEGAL_REPO_ID_CHARS);
+                    problems, prefix + ".id", Severity.WARNING, repository.getId(), null, ILLEGAL_NTFS_FILENAME_CHARS);
 
             if ("local".equals(repository.getId())) {
                 addViolation(
diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultSettingsValidator.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultSettingsValidator.java
index 5e960b1522..4887dffe72 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultSettingsValidator.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultSettingsValidator.java
@@ -39,7 +39,7 @@ public class DefaultSettingsValidator {
     private static final String ID = "[\\w.-]+";
     private static final Pattern ID_REGEX = Pattern.compile(ID);
 
-    private static final String ILLEGAL_REPO_ID_CHARS = "\\/:\"<>|?*"; // ILLEGAL_FS_CHARS
+    private static final String ILLEGAL_NTFS_FILENAME_CHARS = "\\/:\"<>|?*";
 
     @SuppressWarnings("checkstyle:MethodLength")
     public void validate(Settings settings, boolean isProjectSettings, ProblemCollector<BuilderProblem> problems) {
@@ -157,7 +157,7 @@ public void validate(Settings settings, boolean isProjectSettings, ProblemCollec
                         BuilderProblem.Severity.WARNING,
                         mirror.getId(),
                         null,
-                        ILLEGAL_REPO_ID_CHARS);
+                        ILLEGAL_NTFS_FILENAME_CHARS);
 
                 if ("local".equals(mirror.getId())) {
                     addViolation(
@@ -242,7 +242,7 @@ private void validateRepositories(
                     BuilderProblem.Severity.WARNING,
                     repository.getId(),
                     null,
-                    ILLEGAL_REPO_ID_CHARS);
+                    ILLEGAL_NTFS_FILENAME_CHARS);
 
             if ("local".equals(repository.getId())) {
                 addViolation(
diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
index 302abd9ea2..af5a4ab2c9 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
@@ -92,13 +92,15 @@ public class DefaultModelValidator implements ModelValidator {
     private static final Pattern EXPRESSION_NAME_PATTERN = Pattern.compile("\\$\\{(.+?)}");
     private static final Pattern EXPRESSION_PROJECT_NAME_PATTERN = Pattern.compile("\\$\\{(project.+?)}");
 
-    private static final String ILLEGAL_FS_CHARS = "\\/:\"<>|?*";
+    /** Characters that cannot appear in a file or directory name on FAT or NTFS filesystems */
+    private static final String ILLEGAL_NTFS_FILENAME_CHARS = "\\/:\"<>|?*";
 
-    private static final String ILLEGAL_RELATIVE_PATH_CHARS = ":\"<>|?*";
+    /** same as above except that it allows the path separators / and \ */
+    private static final String ILLEGAL_WINDOWS_PATH_CHARS = ":\"<>|?*";
 
-    private static final String ILLEGAL_VERSION_CHARS = ILLEGAL_FS_CHARS;
+    private static final String ILLEGAL_VERSION_CHARS = ILLEGAL_NTFS_FILENAME_CHARS;
 
-    private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_FS_CHARS;
+    private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_NTFS_FILENAME_CHARS;
 
     private static final String EMPTY = "";
 
@@ -498,7 +500,7 @@ && equals(parent.getArtifactId(), model.getArtifactId())) {
                         parent.getRelativePath(),
                         null,
                         parent,
-                        ILLEGAL_RELATIVE_PATH_CHARS);
+                        ILLEGAL_WINDOWS_PATH_CHARS);
             }
 
             boolean isModelVersion41OrMore = !Objects.equals(ModelBuilder.MODEL_VERSION_4_0_0, model.getModelVersion());