elharo commented on code in PR #11702:
URL: https://github.com/apache/maven/pull/11702#discussion_r2812000748


##########
impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java:
##########
@@ -692,49 +692,102 @@ private void initProject(MavenProject project, 
ModelBuilderResult result) {
                 }
 
                 /*
-                 * `sourceDirectory`, `testSourceDirectory` and 
`scriptSourceDirectory`
-                 * are ignored if the POM file contains at least one enabled 
<source> element
-                 * for the corresponding scope and language. This rule exists 
because
-                 * Maven provides default values for those elements which may 
conflict
-                 * with user's configuration.
+                 * Source directory handling depends on project type and 
<sources> configuration:
                  *
-                 * Additionally, for modular projects, legacy directories are 
unconditionally
-                 * ignored because it is not clear how to dispatch their 
content between
-                 * different modules. A warning is emitted if these properties 
are explicitly set.
+                 * 1. CLASSIC projects (no <sources>):
+                 *    - All legacy directories are used
+                 *
+                 * 2. MODULAR projects (have <module> in <sources>):
+                 *    - ALL legacy directories are rejected (can't dispatch 
between modules)
+                 *    - Physical presence of default directories 
(src/main/java) also triggers ERROR
+                 *
+                 * 3. NON-MODULAR projects with <sources>:
+                 *    - Explicit legacy directories (differ from default) are 
always rejected

Review Comment:
   This is current behavior, right?



##########
impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java:
##########
@@ -692,49 +692,102 @@ private void initProject(MavenProject project, 
ModelBuilderResult result) {
                 }
 
                 /*
-                 * `sourceDirectory`, `testSourceDirectory` and 
`scriptSourceDirectory`
-                 * are ignored if the POM file contains at least one enabled 
<source> element
-                 * for the corresponding scope and language. This rule exists 
because
-                 * Maven provides default values for those elements which may 
conflict
-                 * with user's configuration.
+                 * Source directory handling depends on project type and 
<sources> configuration:
                  *
-                 * Additionally, for modular projects, legacy directories are 
unconditionally
-                 * ignored because it is not clear how to dispatch their 
content between
-                 * different modules. A warning is emitted if these properties 
are explicitly set.
+                 * 1. CLASSIC projects (no <sources>):
+                 *    - All legacy directories are used

Review Comment:
   probably need to use HTML in the javadoc comments for lists



##########
impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java:
##########
@@ -906,44 +959,60 @@ private void initProject(MavenProject project, 
ModelBuilderResult result) {
         }
 
         /**
-         * Warns about legacy directory usage in a modular project. Two cases 
are handled:
+         * Validates that legacy directory configuration does not conflict 
with {@code <sources>}.
+         * <p>
+         * When {@code <sources>} is configured, the build fails if:
          * <ul>
-         *   <li>Case 1: The default legacy directory exists on the filesystem 
(e.g., src/main/java exists)</li>
-         *   <li>Case 2: An explicit legacy directory is configured that 
differs from the default</li>
+         *   <li><b>Configuration presence</b>: an explicit legacy 
configuration differs from the default</li>

Review Comment:
   probably don't use <b> here



##########
impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java:
##########
@@ -692,49 +692,102 @@ private void initProject(MavenProject project, 
ModelBuilderResult result) {
                 }
 
                 /*
-                 * `sourceDirectory`, `testSourceDirectory` and 
`scriptSourceDirectory`
-                 * are ignored if the POM file contains at least one enabled 
<source> element
-                 * for the corresponding scope and language. This rule exists 
because
-                 * Maven provides default values for those elements which may 
conflict
-                 * with user's configuration.
+                 * Source directory handling depends on project type and 
<sources> configuration:
                  *
-                 * Additionally, for modular projects, legacy directories are 
unconditionally
-                 * ignored because it is not clear how to dispatch their 
content between
-                 * different modules. A warning is emitted if these properties 
are explicitly set.
+                 * 1. CLASSIC projects (no <sources>):
+                 *    - All legacy directories are used
+                 *
+                 * 2. MODULAR projects (have <module> in <sources>):
+                 *    - ALL legacy directories are rejected (can't dispatch 
between modules)
+                 *    - Physical presence of default directories 
(src/main/java) also triggers ERROR
+                 *
+                 * 3. NON-MODULAR projects with <sources>:
+                 *    - Explicit legacy directories (differ from default) are 
always rejected
+                 *    - If <sources> has Java for a scope: legacy is not used 
(even if matching default)
+                 *    - If <sources> has no Java for a scope: legacy is used 
as implicit fallback

Review Comment:
   ditto



##########
impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java:
##########
@@ -692,49 +692,102 @@ private void initProject(MavenProject project, 
ModelBuilderResult result) {
                 }
 
                 /*
-                 * `sourceDirectory`, `testSourceDirectory` and 
`scriptSourceDirectory`
-                 * are ignored if the POM file contains at least one enabled 
<source> element
-                 * for the corresponding scope and language. This rule exists 
because
-                 * Maven provides default values for those elements which may 
conflict
-                 * with user's configuration.
+                 * Source directory handling depends on project type and 
<sources> configuration:
                  *
-                 * Additionally, for modular projects, legacy directories are 
unconditionally
-                 * ignored because it is not clear how to dispatch their 
content between
-                 * different modules. A warning is emitted if these properties 
are explicitly set.
+                 * 1. CLASSIC projects (no <sources>):
+                 *    - All legacy directories are used
+                 *
+                 * 2. MODULAR projects (have <module> in <sources>):
+                 *    - ALL legacy directories are rejected (can't dispatch 
between modules)
+                 *    - Physical presence of default directories 
(src/main/java) also triggers ERROR
+                 *
+                 * 3. NON-MODULAR projects with <sources>:
+                 *    - Explicit legacy directories (differ from default) are 
always rejected
+                 *    - If <sources> has Java for a scope: legacy is not used 
(even if matching default)

Review Comment:
   This bullet point needs to be rewritten. I cannot parse it. 



##########
impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java:
##########
@@ -692,49 +692,102 @@ private void initProject(MavenProject project, 
ModelBuilderResult result) {
                 }
 
                 /*
-                 * `sourceDirectory`, `testSourceDirectory` and 
`scriptSourceDirectory`
-                 * are ignored if the POM file contains at least one enabled 
<source> element
-                 * for the corresponding scope and language. This rule exists 
because
-                 * Maven provides default values for those elements which may 
conflict
-                 * with user's configuration.
+                 * Source directory handling depends on project type and 
<sources> configuration:
                  *
-                 * Additionally, for modular projects, legacy directories are 
unconditionally
-                 * ignored because it is not clear how to dispatch their 
content between
-                 * different modules. A warning is emitted if these properties 
are explicitly set.
+                 * 1. CLASSIC projects (no <sources>):
+                 *    - All legacy directories are used
+                 *
+                 * 2. MODULAR projects (have <module> in <sources>):
+                 *    - ALL legacy directories are rejected (can't dispatch 
between modules)
+                 *    - Physical presence of default directories 
(src/main/java) also triggers ERROR

Review Comment:
   I could well be missing something since I avoid modules like the plague, but 
why doesn't this go into the unnamed module? 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to