136 lines
4.7 KiB
Clojure
136 lines
4.7 KiB
Clojure
;; ---------------------------------------------------------
|
|
;; Build Script
|
|
;;
|
|
;; Build project and package for deployment
|
|
;; - `uberjar` - packaged application for deployment
|
|
;; - `clean` remove all build assets and jar files
|
|
;;
|
|
;; All functions are passed command line arguments
|
|
;; - `nil` is passed if there are no arguments
|
|
;;
|
|
;;
|
|
;; tools.build API commands
|
|
;; - `create-basis` create a project basis
|
|
;; - `copy-dir` copy Clojure source and resources into a working dir
|
|
;; - `compile-clj` compile Clojure source code to classes
|
|
;; - `delete` - remove path from file space
|
|
;; - `write-pom` - write pom.xml and pom.properties files
|
|
;; - `jar` - to jar up the working dir into a jar file
|
|
;;
|
|
;; ---------------------------------------------------------
|
|
|
|
(ns build
|
|
(:require
|
|
[clojure.tools.build.api :as build-api]
|
|
[clojure.edn :as edn]
|
|
[clojure.pprint :as pprint]))
|
|
|
|
;; ---------------------------------------------------------
|
|
;; Project configuration
|
|
|
|
(def project-config
|
|
"Project configuration to support all tasks"
|
|
{:class-directory "target/classes"
|
|
:main-namespace 'practicalli/playground
|
|
:project-basis (build-api/create-basis)
|
|
:uberjar-file "target/practicalli-playground-standalone.jar"})
|
|
|
|
(defn config
|
|
"Display build configuration"
|
|
[config]
|
|
(pprint/pprint (or config project-config)))
|
|
|
|
;; End of Build configuration
|
|
;; ---------------------------------------------------------
|
|
|
|
;; ---------------------------------------------------------
|
|
;; Build tasks
|
|
|
|
(def project-config
|
|
"Project configuration to support all tasks"
|
|
(-> (edn/read-string (slurp "deps.edn"))
|
|
:project
|
|
(merge
|
|
{:class-directory "target/classes"
|
|
:project-basis (build-api/create-basis)
|
|
:main-namespace 'org.domaindrivenarchitecture/dda-backup})))
|
|
|
|
|
|
(defn config
|
|
"Display build configuration"
|
|
[config]
|
|
(pprint/pprint (or config project-config)))
|
|
|
|
;; End of Build configuration
|
|
;; ---------------------------------------------------------
|
|
|
|
;; ---------------------------------------------------------
|
|
;; Build tasks
|
|
|
|
(defn clean
|
|
"Remove a directory
|
|
- `:path '\"directory-name\"'` for a specific directory
|
|
- `nil` (or no command line arguments) to delete `target` directory
|
|
`target` is the default directory for build artefacts
|
|
Checks that `.` and `/` directories are not deleted"
|
|
[directory]
|
|
(when
|
|
(not (contains? #{"." "/"} directory))
|
|
(build-api/delete {:path (or (:path directory) "target")})))
|
|
|
|
(defn jar [_]
|
|
(let [{:keys [name version project-basis class-directory license]} project-config
|
|
jar-file (format "target/%s-%s.jar" name version)]
|
|
(clean "target")
|
|
(build-api/write-pom {:class-dir class-directory
|
|
:lib name
|
|
:version version
|
|
:basis project-basis
|
|
:src-dirs ["src"]})
|
|
(build-api/copy-dir {:src-dirs ["src" "resources"]
|
|
:target-dir class-directory})
|
|
(build-api/jar {:class-dir class-directory
|
|
:jar-file jar-file})))
|
|
|
|
(defn install [_]
|
|
(let [{:keys [name version project-basis class-directory]} project-config
|
|
jar-file (format "target/%s-%s.jar" name version)]
|
|
(build-api/install {:basis project-basis
|
|
:lib name
|
|
:version version
|
|
:jar-file jar-file
|
|
:class-dir class-directory})))
|
|
|
|
(defn deploy [opts]
|
|
(let [{:keys [name version class-directory]} project-config
|
|
jar-file (format "target/%s-%s.jar" name version)]
|
|
((requiring-resolve 'deps-deploy.deps-deploy/deploy)
|
|
(merge {:installer :remote
|
|
:artifact jar-file
|
|
:pom-file (build-api/pom-path {:lib name :class-dir class-directory})}
|
|
opts))
|
|
opts))
|
|
|
|
(defn uberjar
|
|
"Create an archive containing Clojure and the build of the project
|
|
Merge command line configuration to the default project config"
|
|
[options]
|
|
(let [config (merge project-config options)
|
|
{:keys [class-directory name main-namespace project-basis class-directory]} project-config
|
|
uberjar-file (str "target/" name "-standalone.jar")]
|
|
(clean "target")
|
|
(build-api/copy-dir {:src-dirs ["src" "resources"]
|
|
:target-dir class-directory})
|
|
|
|
(build-api/compile-clj {:basis project-basis
|
|
:class-dir class-directory
|
|
:src-dirs ["src"]})
|
|
|
|
(build-api/uber {:basis project-basis
|
|
:class-dir class-directory
|
|
:main main-namespace
|
|
:uber-file uberjar-file})))
|
|
|
|
;; End of Build tasks
|
|
;; ---------------------------------------------------------
|
|
|