From 6428af780974144c1802a063e35bfca5e4a51eb7 Mon Sep 17 00:00:00 2001 From: Phil Hagelberg Date: Tue, 15 Mar 2011 18:45:10 -0700 Subject: [PATCH] Add deploy guide. --- DEPLOY.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 DEPLOY.md diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 000000000..466cb9fa1 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,67 @@ +# Deploying Libraries + +Getting your library into [Clojars](http://clojars.org) is fairly +straightforward as is documented near the end of +[the Leiningen tutorial](https://github.com/technomancy/leiningen/blob/stable/TUTORIAL.md). +However, deploying is not always as straightforward as the process +described there. + +## Clojars Forks + +Sometimes you'll need to publish libraries that you don't directly +maintain, either because the original maintainer hasn't published it +or because you need some bugfixes that haven't been applied upstream +yet. Don't do this if it's at all possible to get the upstream project +to release a snapshot somewhere with the changes you need, but in some +cases it's unavoidable. + +In this case you don't want to publish it under its original group-id, +since either you won't have permission to do so (if it's already on +Clojars) or it will conflict with the same artifact on other +repositories. You should use "org.clojars.$USERNAME" as the group-id +instead. + +## Private Repositories + +There may be times when you want to make a library available to your +team without making it public. This is best done by setting up a +private Maven repository. Both [Archiva](http://archiva.apache.org/) +and [Nexus](http://nexus.sonatype.org/) will allow you to set up +private, password-protected repositories. These also provide proxying +to other repositories, so you can set :omit-default-repositories +in project.clj, and dependency downloads will speed up by quite a bit +with only one server to check. + +The private server will need to be added to the :repositories +listing in project.clj. Archiva and Nexus offer separate repositories +for snapshots and releases, so you'll want two entries for them: + + :repositories {"snapshots" {:url "http://blueant.com/archiva/snapshots" + :username "milgrim" :password "locative.1"} + "releases" "http://blueant.com/archiva/internal"} + +Private repositories need authentication credentials. You'll need to +provide either a :username/:password combination or +a :private-key location with or without a +:passphrase. If you want to avoid putting sensitive +information into your project.clj file as in the releases +entry above, you can store authentication information in +~/.lein/init.clj as a leiningen-auth map keyed off +the repository's URL: + + (def leiningen-auth {"http://localhost:8080/archiva/repository/internal/" + {:username "milgrim" :password "locative.2"}}) + +This also allows different users using the same checkout to upload +using different credentials. + +Once you've set up a private repository and configured project.clj +appropriately, you can deploy to it: + + $ lein deploy + +If the project's current version is a SNAPSHOT, it will deploy to the +snapshots repository; otherwise it will go to +releases. The deploy task also takes a repository +name as an argument that will be looked up in the +:repositories map if you want to override this.