|
| 1 | +(ns build |
| 2 | + (:require [clojure.tools.build.api :as b] |
| 3 | + [clojure.tools.build.util.file :as file])) |
| 4 | + |
| 5 | +(def build-folder "target") |
| 6 | +(def jar-content (str build-folder "/classes")) |
| 7 | +(def javadoc-dir "target/javadoc") |
| 8 | + |
| 9 | +(def basis (b/create-basis {:project "deps.edn"})) |
| 10 | + |
| 11 | +(def version (-> basis :aliases :stencil/version (doto assert))) |
| 12 | + |
| 13 | +(def lib 'io.github.erdos/stencil-core) |
| 14 | + |
| 15 | +(def jar-file-name (format "%s/%s-%s.jar" build-folder (name lib) version)) |
| 16 | +(def uber-file-name (format "%s/%s-%s-standalone.jar" build-folder (name lib) version)) |
| 17 | + |
| 18 | +(defn clean [opts] |
| 19 | + (b/delete {:path build-folder}) |
| 20 | + (println (format "Build folder \"%s\" removed" build-folder)) |
| 21 | + opts) |
| 22 | + |
| 23 | +(defn compile-java [opts] |
| 24 | + (clean opts) |
| 25 | + (println :should-compile-java-here) |
| 26 | + (b/javac {:src-dirs ["java-src"] |
| 27 | + :basis basis |
| 28 | + :class-dir jar-content |
| 29 | + :javac-opts ["-source" "8" "-target" "8"]}) |
| 30 | + (b/copy-file {:src "java-src/io/github/erdos/stencil/standalone/help.txt" |
| 31 | + :target "target/classes/io/github/erdos/stencil/standalone/help.txt"}) |
| 32 | + (spit (str jar-content "/stencil-version") version) |
| 33 | + opts) |
| 34 | + |
| 35 | +(defn javadoc [opts] |
| 36 | + (file/ensure-dir javadoc-dir) |
| 37 | + (let [src-dirs ["java-src"] |
| 38 | + args ["-d" javadoc-dir] |
| 39 | + java-files (mapcat #(file/collect-files (b/resolve-path %) :collect (file/suffixes ".java")) src-dirs) |
| 40 | + args (into args (map str) java-files) |
| 41 | + tool (javax.tools.ToolProvider/getSystemDocumentationTool) |
| 42 | + exit (.run tool nil nil nil (into-array String args))] |
| 43 | + (if (zero? exit) |
| 44 | + opts |
| 45 | + (throw (ex-info "Javadoc command error" {:exit exit}))))) |
| 46 | + |
| 47 | +(defn pom [opts] |
| 48 | + (println "Generating pom.xml file") |
| 49 | + (b/write-pom |
| 50 | + {:class-dir jar-content |
| 51 | + :basis basis |
| 52 | + :version version |
| 53 | + :lib lib |
| 54 | + :pom-data |
| 55 | + [[:licenses |
| 56 | + [:license |
| 57 | + [:name "Eclipse Public License - v 2.0"] |
| 58 | + [:url "https://www.eclipse.org/legal/epl-2.0/"] |
| 59 | + [:distribution "repo"]]]]}) |
| 60 | + opts) |
| 61 | + |
| 62 | +(defn jar [opts] |
| 63 | + (clean opts) |
| 64 | + (compile-java opts) |
| 65 | + (pom opts) |
| 66 | + (b/copy-dir {:src-dirs ["src"] :target-dir jar-content}) |
| 67 | + (b/jar {:class-dir jar-content |
| 68 | + :jar-file jar-file-name}) |
| 69 | + (println "Built JAR file") |
| 70 | + opts) |
| 71 | + |
| 72 | +(defn java-test [_] |
| 73 | + (def basis (b/create-basis {:project "deps.edn" :aliases [:junit]})) |
| 74 | + |
| 75 | + (println "Running Java test cases") |
| 76 | + (println "- compiling java sources") |
| 77 | + (b/javac {:src-dirs ["java-src" "java-test"] |
| 78 | + :basis basis |
| 79 | + :class-dir jar-content |
| 80 | + :javac-opts ["-source" "8" "-target" "8"]}) |
| 81 | + (println "- compiling clj sources") |
| 82 | + (b/compile-clj {:basis basis |
| 83 | + :src-dirs ["src"] |
| 84 | + :class-dir jar-content |
| 85 | + :bindings {#'*warn-on-reflection* true}}) |
| 86 | + (-> {:basis basis |
| 87 | + :main "org.junit.platform.console.ConsoleLauncher" |
| 88 | + :main-args ["-p" "io.github.erdos.stencil" |
| 89 | + "--fail-if-no-tests" |
| 90 | + "--reports-dir=target/surefire-reports"]} |
| 91 | + (b/java-command) |
| 92 | + (b/process) |
| 93 | + (#(when-not (zero? (:exit %)) (throw (ex-info "junit error" %))))) |
| 94 | + (println "Done")) |
| 95 | + |
| 96 | +(defn uber [opts] |
| 97 | + (jar opts) |
| 98 | + (b/uber {:class-dir jar-content |
| 99 | + :uber-file uber-file-name |
| 100 | + :basis basis |
| 101 | + :main 'io.github.erdos.stencil.Main}) |
| 102 | + (println (format "Uber file created: \"%s\"" uber-file-name)) |
| 103 | + opts) |
| 104 | + |
| 105 | +(defn install [opts] |
| 106 | + (jar opts) |
| 107 | + (b/install {:basis basis |
| 108 | + :lib lib |
| 109 | + :version version |
| 110 | + :class-dir jar-content |
| 111 | + :jar-file jar-file-name}) |
| 112 | + opts) |
0 commit comments