forked from technomancy/leiningen
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added INTRO.md with concept background thanks to slyphon.
- Loading branch information
1 parent
e9862ce
commit e535fe8
Showing
3 changed files
with
108 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# Introduction to JVM Packaging Concepts | ||
|
||
For those of you new to the JVM who have never touched Maven in anger: | ||
don't panic. Leiningen is designed with you in mind. Leiningen is | ||
built on some Maven libraries; specifically the dependency resolution | ||
parts. These aspects of Maven are not nearly as complex as the build | ||
features that have given it its somewhat fearsome reputation. Think of | ||
it as the package manager of the JVM world, much like Rubygems, CPAN, | ||
etc. There is a central canonical repository, a Clojure-specific | ||
repository called Clojars, and projects often also make their jars | ||
available through project-specific public repositories. It allows you | ||
to define the dependencies of your project, which it then goes and | ||
retrieves, stores in a local repository ("~/.m2" on Unix by default), | ||
and copies into your project's "lib/" directory. This makes it so that | ||
you don't have to check your dependent jar files into your SCM or make | ||
developers hunt down dependency jars by hand. | ||
|
||
Leiningen describes packages using identifiers that look like: | ||
|
||
org.clojure/swank-clojure "1.0" | ||
|
||
* "org.clojure" is called the 'group-id' | ||
* "swank-clojure" is called the 'artifact-id' | ||
* "1.0" is the version of the jar file you require | ||
|
||
Sometimes versions will end in "-SNAPSHOT". This means that it is not | ||
an official release but a development build. In general relying on | ||
snapshot dependencies is discouraged, but sometimes its necessary if | ||
you need bug fixes etc. that have not made their way into a release | ||
yet. Adding a snapshot dependency to your project will cause Leiningen | ||
to actively go seek out the latest version of the dependency every | ||
time you run "lein deps", (whereas normal release versions just use | ||
the local cache) so if you have a lot of snapshots it will slow things | ||
down. | ||
|
||
While it's customary to make group IDs match either artifact IDs or | ||
the Java package, it's not required. Let's take for an example the | ||
[JYaml jar](http://jyaml.sourceforge.net). Looking at their javadocs, | ||
the Java package name is "org.ho.yaml". If you try to add the | ||
following dependency in your project.clj file: | ||
|
||
[org.ho.yaml/jyaml "1.3"] | ||
|
||
You'll get an error when you run "lein deps". One way to find the | ||
correct group id is to use a maven search web site like | ||
[Jarvana](http://jarvana.com). In the "project search" box, enter | ||
"jyaml", and you'll see results that indicate the correct group-id | ||
("org.jyaml") and artifact id ("jyaml"). | ||
|
||
If the jar you're looking for is published in a project's own public | ||
repository instead of the central one, you can use the :repositories | ||
option in project.clj. For instance, if we wanted to use the jars from | ||
the HornetQ project: | ||
|
||
(defproject com.motionbox.hornetq/dashboard "0.0.1-SNAPSHOT" | ||
:description "a simple web interface to the hornetq jmx API" | ||
;; this repository will be referred to in log messages as "jboss-release" | ||
:repositories {"jboss-release" "http://repository.jboss.org/maven2"} | ||
:dependencies [[org.clojure/clojure "1.1.0"] | ||
[org.clojure/clojure-contrib "1.0-SNAPSHOT"] | ||
[commons-logging "1.1.1"] | ||
[org.hornetq/hornetq-core "2.0.0.GA"] | ||
[org.hornetq/hornetq-jms-client "2.0.0.GA"] | ||
[org.hornetq/hornetq-transports "2.0.0.GA"] | ||
[org.hornetq/hornetq-logging "2.0.0.GA"] | ||
[org.jboss.netty/netty "3.1.0.GA"] | ||
[org.jboss.javaee/jboss-jms-api "1.1.0.GA"] | ||
[log4j "1.2.15" :exclusions [javax.mail/mail | ||
javax.jms/jms | ||
com.sun.jdmk/jmxtools | ||
com.sun.jmx/jmxri]] | ||
] | ||
:dev-dependencies [[swank-clojure "1.1.0"]] | ||
:namespaces [com.motionbox.hornetq]) | ||
|
||
For an in-depth walkthrough see the Full Disclojure screencast: | ||
http://vimeo.com/8934942 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters