Quick Search
Browse
Pages
Blog
Labels
Attachments
Mail
Advanced
What’s New
Space Directory
Feed Builder
Keyboard Shortcuts
Confluence Gadgets
Log In
Sign Up
Dashboard
Clojure Design
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
Colour
More colours
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Outdent
Indent
Align left
Align center
Align right
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Wiki Markup
Horizontal rule
tinymce.confluence.insert_menu.macro_desc
Info
JIRA Issue
Status
Gallery
Tasklist
Table of Contents
Other Macros
Undo
Redo
Keyboard Shortcuts Help
<h2>The situation</h2><ul><li>Multi-module clojure-contrib in one repository has not worked well<ul><li>Build is complicated and slow</li><li>Still hard for authors to work on their libs</li></ul></li><li>We will have more projects under the org.clojure umbrella<ul><li>New contrib libraries: nrepl, unify, finger-tree</li><li>More on the way</li></ul></li><li>Current Clojure release process involves manual steps</li></ul><h2>The goals, in order of priority</h2><ul><li>For users<ul><li>1. Find release versions</li><li>2. IDE / tool support</li><li>3. Get just the stuff they need, without stuff they don't</li><li>4. Easy-to-use distributions containing multiple libraries known to work together</li></ul></li><li>For developers<ul><li>1. Build / release automation</li><li>2. Unified build / release process across projects</li><li>3. IDE / tool support</li></ul></li></ul><h2>The plan</h2><h3>Clojure, the language</h3><ul><li>patch <a href="http://dev.clojure.org/jira/browse/CLJ-681">CLJ-681</a>has been applied<ul><li>Keeps the Ant build the way it is now<ul><li>Developers can continue to use Ant for local builds</li></ul></li><li>Maven controls the build/test/release process on Hudson<ul><li>Real pom.xml</li><li>Declares Sonatype's oss-parent POM as a parent<ul><li>Enables releases to public open-source repositories managed by Sonatype</li></ul></li><li>Calls out to Ant for Clojure-specific compile and test phases<ul><li>Temporary until we have better plugins, see <a href="/display/design/Clojure+Maven+Plugin" data-linked-resource-id="950726" data-linked-resource-type="page" data-linked-resource-default-alias="Clojure Maven Plugin" data-base-url="http://dev.clojure.org">Clojure Maven Plugin</a> and <a href="/pages/viewpage.action?pageId=950842" data-linked-resource-id="950842" data-linked-resource-type="page" data-linked-resource-default-alias="Why Maven?" data-base-url="http://dev.clojure.org">Why Maven?</a></li></ul></li></ul></li></ul></li><li>SNAPSHOT releases automatically deployed by hudson</li><li>Numbered releases controlled by Hudson/Maven<ul><li>Only Clojure language committers may initiate a release</li></ul></li></ul><h3>New contrib projects</h3><ul><li>To promote new contrib projects, see <a href="/display/doc/Guidelines+for+Clojure+Contrib+committers" data-linked-resource-id="458767" data-linked-resource-type="page" data-linked-resource-default-alias="Guidelines for Clojure Contrib committers" data-base-url="http://dev.clojure.org">Guidelines for Clojure Contrib committers</a></li><li>To release, see <a href="/display/design/How+to+Make+Releases" data-linked-resource-id="1572906" data-linked-resource-type="page" data-linked-resource-default-alias="How to Make Releases" data-base-url="http://dev.clojure.org">How to Make Releases</a></li><li>Git repositories<ul><li>New contrib libs get their own repos under the <a href="https://github.com/clojure">Clojure github organization</a></li><li>Each lib gets one or more "owners" who have commit access</li><li>Library authors still use JIRA + patches to accept contributions</li><li>All contributors <em>must</em> have a CA</li></ul></li><li>JIRA<ul><li>Each contrib library/project will get its own JIRA</li></ul></li><li>Maven<ul><li>Contrib projects must be built with Maven 2</li><li>All contrib POMs must declare <a href="https://github.com/clojure/build.poms">org.clojure:pom.contrib</a>as a parent<ul><li>Inherits from Sonatype's OSS POM</li><li>Defines release process (OSS snapshots + staging)</li><li>Set dependency on latest Clojure release (1.3.0-alpha5)<ul><li>May be overridden on a per-project basis</li><li>Support building with a local Clojure JAR</li></ul></li><li>Inherits from pom.oss-deploy</li><li>Sets license to EPL</li><li>Configures Java 1.5 as a target</li><li>Sets common plugin/build configurations</li><li>Uses <strong>com.theoryinpractise:clojure-maven-plugin</strong><ul><li>Temporary until we have better plugins, see <a href="/display/design/Clojure+Maven+Plugin" data-linked-resource-id="950726" data-linked-resource-type="page" data-linked-resource-default-alias="Clojure Maven Plugin" data-base-url="http://dev.clojure.org">Clojure Maven Plugin</a> and <a href="/pages/viewpage.action?pageId=950842" data-linked-resource-id="950842" data-linked-resource-type="page" data-linked-resource-default-alias="Why Maven?" data-base-url="http://dev.clojure.org">Why Maven?</a></li></ul></li><li>Defaults to source-only JAR, override to AOT-compile only when necessary</li></ul></li></ul></li></ul><h3>"Classic" / old clojure-contrib</h3><ul><li>The old monolithic build structure is deprecated<ul><li>The 1.2.0 release is available at <a href="http://clojure.org/downloads">clojure.org</a> and the <a href="http://repo1.maven.org/maven2/org/clojure/clojure-contrib/">Maven Central Repository</a></li></ul></li><li>The interim multi-module build structure is deprecated<ul><li>Module releases up to 1.3.0-alpha4 are available in the <a href="http://build.clojure.org/releases">build.clojure.org release repository</a><ul><li>These are source-only JARs wherever possible</li><li>They should be compatible with any version of Clojure</li></ul></li><li>The multi-module build does not work with Clojure 1.3.0-alpha5 and later</li></ul></li><li>Libraries with community demand <strong>and</strong> willing maintainers will become "new" contrib projects as above</li><li>The <a href="http://dev.clojure.org/jira/browse/CONTRIB">"classic" clojure-contrib JIRA</a>is deprecated<ul><li>Important issues should be reposted in the new per-project JIRAs</li></ul></li></ul><h2>Work to be done</h2><ul><li>DONE Clean up / finalize pom.contrib<ul><li>Replace 3-level inheritance (pom.oss-deploy -> pom.baseline -> pom.contrib) with just pom.contrib</li></ul></li><li>DONE Finalize contrib project Hudson config</li><li>DONE Figure out how to give Hudson permissions to contrib authors (Stuart Sierra & Aaron Bedra)</li><li>DONE Create new Hudson job for finger-tree</li><li>DONE Figure out how to manage many similar Hudson configurations (Chas Emerick & Stuart Sierra)<ul><li>See <a href="http://blog.teamlazerbeez.com/2010/02/02/hudson-in-svn/">Keeping Hudson config in version control</a></li><li>See <a href="http://wiki.hudson-ci.org/display/HUDSON/Remote+access+API">Hudson API</a></li></ul></li><li>TODO verify Sonatype release goals do the right thing in the presence of multiple staging repositories</li><li>TODO Get older releases into Maven Central?</li><li>TODO Redirect repositories at build.clojure.org to OSS Sonatype<ul><li>Assuming we roll all existing releases into central, we only need to set up redirects for /snapshots</li></ul></li></ul><h2>Possible future development</h2><ul><li>Improve the Maven build process; see <a href="/display/design/Clojure+Maven+Plugin" data-linked-resource-id="950726" data-linked-resource-type="page" data-linked-resource-default-alias="Clojure Maven Plugin" data-base-url="http://dev.clojure.org">Clojure Maven Plugin</a></li><li>Better Clojure-from-Java interface (see <a href="http://dev.clojure.org/jira/browse/CLJ-452">CLJ-452</a>)</li><li>Aggregate projects that package many contrib libraries in one distribution</li><li>Testing harness to build/test many Clojure libraries with a locally-built Clojure JAR</li><li>Making the build process better<ul><li>Improve clojure.lang.Compile<ul><li>Investigate why compilation sometimes pauses for a long time (minutes) at the end</li><li>Investigate if core needs explicit compilation order</li></ul></li><li>Investigate Maven 3</li><li>Investigate Polyglot Maven</li><li>Documentation: how do I do X, Y, or Z?</li><li>Write more plugins<ul><li>Not hard</li><li>Possible in Clojure; see <a href="https://github.com/hugoduncan/clojure-mojo-example">clojure-mojo-example</a></li><li>More portable than shell scripts</li></ul></li><li>Developing other non-Maven tools<ul><li>Will require a lot of work to match what Maven can do</li><li>Not a Clojure/core priority</li></ul></li></ul></li></ul>
Attachments
Labels
Location
< Edit
Preview >
Loading…
Save
Cancel
Next hint
search
attachments
weblink
advanced