Add new task for generating project skeletons.

This commit is contained in:
Phil Hagelberg 2009-11-19 17:50:33 -08:00
parent d99675466b
commit bda58abe04
6 changed files with 41 additions and 5 deletions

1
.gitignore vendored
View file

@ -4,3 +4,4 @@ sample/nomnomnom.jar
classes/
leiningen.jar
pom.xml
Manifest.txt

View file

@ -52,6 +52,8 @@ rather than copying and pasting among each of your projects.
$ lein help [TASK] # show a list of tasks or help for a given TASK
$ lein new NAME # generate a new project skeleton
## Configuration
Place a project.clj file in the project root that looks something like this:

View file

@ -9,7 +9,4 @@
[org.clojure/clojure-contrib "1.0-SNAPSHOT"]
[ant/ant-launcher "1.6.2"]
[org.apache.maven/maven-ant-tasks "2.0.10"]]
;; Wait till this makes it to a public repo.
;; :dev-dependencies [[org.clojure/swank-clojure "1.0"]]
:dev-dependencies [[lein-clojars "0.5.0-SNAPSHOT"]]
)
:dev-dependencies [[org.clojure/swank-clojure "1.0"]])

View file

@ -32,7 +32,9 @@
action-ns (symbol (str "leiningen." command))
_ (require action-ns)
action (ns-resolve action-ns (symbol command))
project (read-project)]
project (if (= command "new") ; only new works without a project.clj
(first args)
(read-project))]
(binding [*compile-path* (or (:compile-path project)
(str (:root project) "/classes/"))]
(apply action project args)

33
src/leiningen/new.clj Normal file
View file

@ -0,0 +1,33 @@
(ns leiningen.new
"Create a new project skeleton."
(:use [clojure.contrib.duck-streams :only [spit]]
[clojure.contrib.java-utils :only [file]]
[clojure.contrib.str-utils :only [str-join]]))
(defn new [project-name & [args]]
(.mkdirs (file project-name))
(spit (file project-name "project.clj")
(pr-str (list 'defproject (symbol "leiningen") "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [['org.clojure/clojure
"1.1.0-alpha-SNAPSHOT"]
['org.clojure/clojure-contrib
"1.0-SNAPSHOT"]])))
(doseq [d [(str "src/" project-name) "test" "lib" "classes"]]
(.mkdirs (file project-name d)))
;; maybe keep this somewhere else?
(spit (file project-name "src" (str project-name ".clj"))
(str "(ns " project-name ".core)\n"))
(spit (file project-name ".gitignore")
(str-join "\n" ["pom.xml"
"Manifest.txt"
(str project-name ".jar")]))
(spit (file project-name "lib" ".gitignore") "*")
(spit (file project-name "classes" ".gitignore") "*")
(spit (file project-name "README")
(str-join "\n\n" [(str "# " project-name)
"FIXME: write description"
"## Usage" "FIXME: write"
"## Installation" "FIXME: write"
"## License" "FIXME: write\n"]))
(println "Created new project:" project-name))

View file

@ -36,6 +36,7 @@
(.setVersion (:version project))
(.setGroupId (:group project))
(.setDescription (:description project)))]
;; TODO: add leiningen as a test-scoped dependency
(doseq [dep (:dependencies project)]
(.addDependency model (make-dependency dep)))
(doseq [repo (concat (:repositories project) default-repos)]