Goals
We need a convenient, uniform way to build Clojure and contrib projects. Problems are
- Team will work across many projects and will not want to lean a different approach to building each one.
- Projects will need to work with a variety of tools: Hudson, leiningen, maven, and IDEs at a minimum. (Note that these are to some degree overlapping.)
- Users will want an easy way to find released versions.
- Users will want sufficiently fine granularity of releases to get things they need, without a ton of stuff they don't.
- Team will need automation: one step to trigger an entire push/build/release cycle when necessary.
- Clojure/core will probably want to package multiple libs into easy-to-consume distributions.
Near-term Process
- Clojure and all contrib projects will be built using Maven 2
- All POMs will inherit from pom.baseline or pom.contrib
- Only Hudson will deploy releases or SNAPSHOTs
- All builds must be configured for JDK 1.5 in Hudson
- Snag: clojure-maven-plugin requires 1.6. Can still use "toolchains" to build with 1.5; need to configure in POMs.
- Stable and SNAPSHOT releases will be deployed to Sonatype's OSS repository
- Stable releases will be initiated by the M2 Release Plugin
- Contrib projects will produce source-only JARs whenever possible
- ZIP distributions will be generated by Maven 2 and manually uploaded to clojure.org
Possible Future Development
- Leiningen support
- Ant build scripts for local development/testing
- Aggregate projects that package many contrib libraries in one distribution
- Redirect build.clojure.org/snapshots and /releases to Central or Sonatype repository
Labels: