Unify source tracking with SourceHandlingContext (#11632)

- Replace boolean flags (hasMain, hasTest, etc.) with flexible set-based tracking for all language/scope combinations.
- Rename ResourceHandlingContext to SourceHandlingContext
- Add duplicate detection with WARNING for enabled sources
- Add hasSources() method for checking language/scope combinations
- Rename 'src' variable to 'sourceRoot' for clarity
- Replace Collectors.toList() with .toList() in DefaultProjectBuilder
- Use Java 17+ Stream.toList() instead of Collectors.toList().
- Fix Windows path separator issue in ProjectBuilderTest
- Implement validation rules for modular source handling (#11612):
- AC6: ERROR when mixing modular (with module) and classic (without module) sources within <sources>
- AC7: WARNING when legacy <sourceDirectory>/<testSourceDirectory> are used in modular projects (both explicit config and filesystem existence)
- Add validateNoMixedModularAndClassicSources() to SourceHandlingContext
- Add warnIfExplicitLegacyDirectory() to DefaultProjectBuilder
- Update tests to verify AC6 and AC7 behavior
- Update test project comments to reflect correct behavior

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
8 files changed
tree: f81107fabd9ad910ab0f23441c385a143cfea53c
  1. .github/
  2. .idea/
  3. .mvn/
  4. apache-maven/
  5. api/
  6. compat/
  7. impl/
  8. its/
  9. src/
  10. .asf.yaml
  11. .git-blame-ignore-revs
  12. .gitattributes
  13. .gitignore
  14. CONTRIBUTING.md
  15. deploySite.sh
  16. doap_Maven.rdf
  17. Jenkinsfile
  18. LICENSE
  19. NOTICE
  20. pom.xml
  21. README.md
README.md

Apache Maven

Apache License, Version 2.0, January 2004 Reproducible Builds

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

If you think you have found a bug, please file an issue in the Maven Issue Tracker.

Documentation

More information can be found on Apache Maven Homepage. Questions related to the usage of Maven should be posted on the Maven User List.

Where can I get the latest release?

You can download the release source from our download page.

Contributing

If you are interested in the development of Maven, please consult the documentation first and afterward you are welcome to join the developers mailing list to ask questions or discuss new ideas/features/bugs etc.

Take a look into the contribution guidelines.

License

This code is under the Apache License, Version 2.0, January 2004.

See the NOTICE file for required notices and attributions.

Donations

Do you like Apache Maven? Then donate back to the ASF to support the development.

Quick Build

If you want to bootstrap Maven, you'll need:

  • Java 17+
  • Maven 3.6.3 or later
  • Run Maven, specifying a location into which the completed Maven distro should be installed:
    mvn -DdistributionTargetDir="$HOME/app/maven/apache-maven-4.1.x-SNAPSHOT" clean package