[MNG-5668] Add a feature experiments framework to allow for opt-in

Users get to turn on all experiments (no partial activation) by adding the experiments extension to `.mvn/extensions.xml`, e.g.

    <?xml version="1.0" encoding="UTF-8"?>
    <extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
      <extension>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-experiments</artifactId>
        <version>3.7.0-SNAPSHOT</version>
      </extension>
    </extensions>

Without the extension, the dynamic phases feature is disabled

With the extension the feature is enabled, e.g.

    [INFO] Enabling experimental features of Maven 3.7.0-SNAPSHOT
    [INFO] Experimental features enabled:
    [INFO]   * dynamic-phases
    [INFO] Scanning for projects...

Attempts to build the project with a different (newer) version of Maven will
fail, e.g.

    [ERROR] The project uses experimental features that require exactly Maven 3.7.0-SNAPSHOT -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MavenExecutionException

Attempts to build the project with a different (older) version of Maven
will blow up due to class not found (I'd like to determine how to lazy
resolve from Plexus/Sisu to avoid that)
15 files changed
tree: 0d2dd66adc084f9ee1a6676f6f90c62b6787fdc0
  1. .github/
  2. apache-maven/
  3. maven-artifact/
  4. maven-builder-support/
  5. maven-compat/
  6. maven-core/
  7. maven-embedder/
  8. maven-experiments/
  9. maven-feature/
  10. maven-model/
  11. maven-model-builder/
  12. maven-plugin-api/
  13. maven-repository-metadata/
  14. maven-resolver-provider/
  15. maven-settings/
  16. maven-settings-builder/
  17. maven-slf4j-provider/
  18. maven-slf4j-wrapper/
  19. src/
  20. .asf.yaml
  21. .gitattributes
  22. .gitignore
  23. CONTRIBUTING.md
  24. deploySite.sh
  25. doap_Maven.rdf
  26. Jenkinsfile
  27. LICENSE
  28. NOTICE
  29. pom.xml
  30. README.md
README.md

Apache Maven

Apache License, Version 2.0, January 2004 Maven Central Jenkins Status Jenkins tests

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 release source from our download page.

Contributing

If you are interested in the development of Maven, please consult the documentation first and afterwards you are welcome to join the developers mailing list to ask question 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

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 1.8+
  • Maven 3.0.5 or later
  • Run Maven, specifying a location into which the completed Maven distro should be installed:
mvn -DdistributionTargetDir="$HOME/app/maven/apache-maven-3.7.x-SNAPSHOT" clean package