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/
|
||||
leiningen.jar
|
||||
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 new NAME # generate a new project skeleton
|
||||
|
||||
## Configuration
|
||||
|
||||
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"]
|
||||
[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"]])
|
||||
|
|
|
@ -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
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))
|
||||
(.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)]
|
||||
|
|
Loading…
Reference in a new issue