this relates to MNG-123, MNG-263

the objectives we have:
1) build m2 with m2 (this is already possible, but I think now that 2.0
is out this should be the primary technique)

2) build source distros (these won't include plugins, and will build as
above)

3) bootstrap without an m2 installation

4) bootstrap without dependencies (ie, build plexus etc from sources
before m2, for gump and gentoo, etc)

First step is to move the assembly configuration from maven-core to the top level of components, and also configure the source distribution mechanism.

The standard assembly plugin will be used to install Maven from the top level (assembly:assembly assembly:unpack).

Here is the layout I was thinking of:

/repos/asf/maven
  /archetype
    /trunk
      /m-a-core
      /m-a-plugin
      /m-archetypes
        /m-a-quickstart
        /m-a-...
  /components
    /trunk
      /maven-ant-tasks (formerly maven-artifact-ant)
      /maven-archiver
      /maven-artifact
      /maven-artifact-manager
      /maven-artifact-test
      /maven-core
      /maven-embedder
      /maven-error-diagnostics
      /maven-model
      /maven-monitor
      /maven-plugin-api
      /maven-plugin-descriptor
      /maven-plugin-parameter-documenter
      /maven-plugin-registry
      /maven-plugin-tools
      /maven-profile
      /maven-project
      /maven-reporting
      /maven-repository-metadata
      /maven-script
      /maven-settings
      /examples
      /integration-tests
        /maven-core-it-plugin
        /maven-core-it-support
        /maven-core-it-verifier
        /maven-core-it
        /maven-embedder-it
      /bootstrap
        /phase1
        /phase2
        ...
      m2-bootstrap-all.[sh|bat]
      ci.sh
  /plugins
    /maven-assembly-plugin
      /trunk
    /maven-...-plugin
      /trunk
  /repository-manager
    /trunk
      /maven-meeper
      /repoclean (rename to maven-repository-converter?)
  /sandbox
    /acm
    /...
  /site
    /trunk

The bootstrap would be much like at present, but be split into phases.

phase 1:
- like mboot2, but pared down so that it can do an install for any limited pom.xml using just the jdk - no longer deals with transitive deps or snapshots, just downloads jars if needed (this means that we can't use a snapshot of modello or plexus in the bootstrap and must instead build with m2 if that is the case; but also greatly simplifies the code to avoid inconsistencies and dual maintenance)
- no longer runs tests, a later phase will rebuild everything and do this

Phase 2:
- builds maven-artifact-manager and its dependencies (by downloading them) - the plexus utils and container, + modello core and modello + wagon and the lightweight http provider - builds a new jar depending on phase 1, utilising the artifact code instead for transitive dependency calculation

Phase 3:
- uses the artifact handling code for further dependency downloads
- build all libraries
- construct a minimal m2 installation in ./target/

Phase 4:
- reuse the installation to rebuild all libraries and install to the final location using assembly as above
- plugins are downloaded, not built

Phase 5:
- integration tests are built and run
- plugins are never rebuilt en masse

If you are building everything from sources, phase 2 will build the sources by checking them out (a simple svn exec, not using maven-scm) or using a provided directory location. These will not be installed (as they are untested), placed in /target/ and used to construct the libraries, so a system like gump would not declare a dependency on them for the bootstrap.

When building from source, phase 4 will build the required plugins and put them in the local repository, just as in phase 2 for modello, etc. The required plugins are jar, plugin, clean, assembly, modello, surefire, resources, install, compile.

What do others think of this?

- Brett

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to