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
- pom.contrib includes support for specifying a local clojure.jar
- Only Hudson will deploy releases or SNAPSHOTs
- All builds must be configured for JDK 1.5 in Hudson
- Stable and SNAPSHOT releases will be deployed to Sonatype's OSS repositories
- Stable releases will be initiated by Hudson (the "Perform Maven Release" link)
- Contrib projects will produce source-only JARs whenever possible
- ZIP distributions will be generated by Maven 2 and manually uploaded to clojure.org
Notes
- In "classic" clojure-contrib, only 4 modules require AOT-compilation: condition, fnmap, jmx, repl-ln
Benefits
- Common build configuration across org.clojure projects
- Ensure released JARs are built with JDK 1.5
- SNAPSHOT releases automatically uploaded to public OSS repositories
- Stable releases automatically staged for promotion into Maven Central repository
- Better continuous integration
Possible Future Development
- Leiningen support
- Ant build scripts for local development/testing
- Aggregate projects that package many contrib libraries in one distribution
- Testing harness to build/test many Clojure libraries with a locally-built Clojure JAR
- Redirect build.clojure.org/snapshots and /releases to Central or Sonatype repository
Labels: