Support :local-repo-classpath.

TODO: ant still spews out a bunch of useless output; doesn't seem to
be a way to suppress the noise.
This commit is contained in:
Phil Hagelberg 2011-05-13 10:47:25 -04:00
parent 399e8b69c2
commit eaf0de1fe9
4 changed files with 38 additions and 14 deletions

View file

@ -136,6 +136,8 @@
:extra-classpath-dirs ["script"] ; more classpath entries not included in jar
:jar-name "sample.jar" ; name of the jar produced by 'lein jar'
:uberjar-name "sample-standalone.jar" ; as above for uberjar
;; Construct classpath from jars in ~/.m2 rather than copying to :library-path
:local-repo-classpath true
;; Options to pass to java compiler for java source
;; See http://ant.apache.org/manual/Tasks/javac.html
:javac-options {:destdir "classes/"}

View file

@ -1,15 +1,35 @@
(ns leiningen.classpath
"Print the classpath of the current project."
(:use [leiningen.core :only [read-project home-dir]]
[leiningen.deps :only [do-deps]]
[clojure.java.io :only [file]]
[clojure.string :only [join]])
(:require [lancet.core :as lancet]
[clojure.string :as string])
(:import (org.apache.tools.ant.types Path)))
(defn ^:internal find-lib-jars
(defn ^{:internal true} fileset-paths [fileset]
(-> fileset
(.getDirectoryScanner lancet/ant-project)
(.getIncludedFiles)))
(defn- find-lib-jars [project]
(.listFiles (file (:library-path project))))
(defn- find-local-repo-jars [project]
;; TODO: Shut up, ant. You are useless. Nobody cares about what you say.
;; Removing ant-project loggers and redirecting their output streams
;; does nothing. How to suppress output?
(for [path (fileset-paths (do-deps project :dependencies))]
(file (System/getProperty "user.home") ".m2" "repository" path)))
(defn ^:internal find-jars
"Returns a seq of Files for all the jars in the project's library directory."
[project]
(filter #(.endsWith (.getName %) ".jar")
(concat (.listFiles (file (:library-path project)))
(concat (if (:local-repo-classpath project)
(find-local-repo-jars project)
(find-lib-jars project))
;; This must be hard-coded because it's used in
;; bin/lein and thus can't be changed in project.clj.
(.listFiles (file (:root project) "lib/dev")))))
@ -59,7 +79,7 @@
(:resources-path project)]
(:extra-classpath-dirs project)
(checkout-deps-paths project)
(find-lib-jars project)
(find-jars project)
(user-plugins)))
(defn get-classpath-string [project]

View file

@ -4,7 +4,7 @@
(:use [leiningen.deps :only [deps]]
[leiningen.core :only [ns->path user-settings]]
[leiningen.javac :only [javac]]
[leiningen.classpath :only [make-path find-lib-jars get-classpath]]
[leiningen.classpath :only [make-path find-jars get-classpath]]
[clojure.java.io :only [file resource reader]]
[leiningen.util.ns :only [namespaces-in-dir]])
(:refer-clojure :exclude [compile])
@ -165,7 +165,7 @@
(empty? (.list (file (:compile-path project)))))
(binding [*silently* true]
(compile project)))
(when (or (empty? (find-lib-jars project))
(when (or (empty? (find-jars project))
(:checksum-deps project))
(deps project))
(if (:eval-in-leiningen project)

View file

@ -127,15 +127,17 @@
(let [deps-task (make-deps-task project deps-set)]
(when (seq (deps-set project))
(.execute deps-task)
(.mkdirs (File. (:library-path project)))
(copy-dependencies (:jar-behavior project)
;; Leiningen's process only has access to lib/dev.
(if (or (= :dev-dependencies deps-set)
(:eval-in-leiningen project))
(str (:root project) "/lib/dev")
(:library-path project))
true (.getReference lancet/ant-project
(.getFilesetId deps-task))))
(when-not (or (:local-repo-classpath project)
(:eval-in-leiningen project))
(.mkdirs (File. (:library-path project)))
(copy-dependencies (:jar-behavior project)
;; Leiningen's process only has access to lib/dev.
(if (or (= :dev-dependencies deps-set)
(:eval-in-leiningen project))
(str (:root project) "/lib/dev")
(:library-path project))
true (.getReference lancet/ant-project
(.getFilesetId deps-task)))))
(.getReference lancet/ant-project (.getFilesetId deps-task))))
(defn native-deps [project]