Add new task for generating project skeletons.
This commit is contained in:
parent
d99675466b
commit
bda58abe04
6 changed files with 41 additions and 5 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,3 +4,4 @@ sample/nomnomnom.jar
|
||||||
classes/
|
classes/
|
||||||
leiningen.jar
|
leiningen.jar
|
||||||
pom.xml
|
pom.xml
|
||||||
|
Manifest.txt
|
||||||
|
|
|
@ -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 help [TASK] # show a list of tasks or help for a given TASK
|
||||||
|
|
||||||
|
$ lein new NAME # generate a new project skeleton
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Place a project.clj file in the project root that looks something like this:
|
Place a project.clj file in the project root that looks something like this:
|
||||||
|
|
|
@ -9,7 +9,4 @@
|
||||||
[org.clojure/clojure-contrib "1.0-SNAPSHOT"]
|
[org.clojure/clojure-contrib "1.0-SNAPSHOT"]
|
||||||
[ant/ant-launcher "1.6.2"]
|
[ant/ant-launcher "1.6.2"]
|
||||||
[org.apache.maven/maven-ant-tasks "2.0.10"]]
|
[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 [[org.clojure/swank-clojure "1.0"]]
|
|
||||||
:dev-dependencies [[lein-clojars "0.5.0-SNAPSHOT"]]
|
|
||||||
)
|
|
||||||
|
|
|
@ -32,7 +32,9 @@
|
||||||
action-ns (symbol (str "leiningen." command))
|
action-ns (symbol (str "leiningen." command))
|
||||||
_ (require action-ns)
|
_ (require action-ns)
|
||||||
action (ns-resolve action-ns (symbol command))
|
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)
|
(binding [*compile-path* (or (:compile-path project)
|
||||||
(str (:root project) "/classes/"))]
|
(str (:root project) "/classes/"))]
|
||||||
(apply action project args)
|
(apply action project args)
|
||||||
|
|
33
src/leiningen/new.clj
Normal file
33
src/leiningen/new.clj
Normal 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))
|
|
@ -36,6 +36,7 @@
|
||||||
(.setVersion (:version project))
|
(.setVersion (:version project))
|
||||||
(.setGroupId (:group project))
|
(.setGroupId (:group project))
|
||||||
(.setDescription (:description project)))]
|
(.setDescription (:description project)))]
|
||||||
|
;; TODO: add leiningen as a test-scoped dependency
|
||||||
(doseq [dep (:dependencies project)]
|
(doseq [dep (:dependencies project)]
|
||||||
(.addDependency model (make-dependency dep)))
|
(.addDependency model (make-dependency dep)))
|
||||||
(doseq [repo (concat (:repositories project) default-repos)]
|
(doseq [repo (concat (:repositories project) default-repos)]
|
||||||
|
|
Loading…
Reference in a new issue