/
build.clj
76 lines (69 loc) · 2.65 KB
/
build.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(ns build
(:require [build-shared]
[clojure.java.shell :as shell]
[clojure.tools.build.api :as b]))
(def version (build-shared/lib-version))
(def lib (build-shared/lib-artifact-name))
;; build constants
(def class-dir "target/classes")
(def basis (b/create-basis {:project "deps.edn"}))
(def jar-file (format "target/%s-%s.jar" (name lib) version))
(defn- jdk-version
"Returns jdk version and major version with appropriate conversion. (ex 1.8 returns major of 8)"
[]
(let [raw-version (->> (shell/sh "java" "-version")
:err
(re-find #"version \"(.*)\"")
last)
major-minor (->> raw-version
(re-find #"(\d+)(?:\.(\d+))?.*")
rest
(map #(when % (Integer/parseInt %))))]
{:version raw-version
:major (if (= (first major-minor) 1)
(second major-minor)
(first major-minor))}))
(defn compile-java [_]
(let [{:keys [version major]} (jdk-version)]
(println "compile-java with java version" version)
(when (< major 8)
(throw (ex-info "jdk version must be at least 8" {})))
(let [javac-opts ["-Xlint" "-Werror"]]
(b/javac (cond-> {:src-dirs ["src/java"]
:class-dir class-dir
:basis basis
;; don't need -source and -target because by default we are compiling with jdk8
:javac-opts javac-opts}
(> major 8)
;; --release replaces -source and -target opts for > jdk8
(update :javac-opts #(conj % "--release" "8")))))))
(defn jar [_]
(compile-java nil)
(println "jarring version" version)
(b/write-pom {:class-dir class-dir
:lib lib
:version version
:scm {:tag (build-shared/version->tag version)}
:basis basis
:src-dirs ["src/clojure"]})
(b/copy-dir {:src-dirs ["src/clojure"]
:target-dir class-dir})
(b/jar {:class-dir class-dir
:jar-file jar-file}))
(defn install [_]
(jar {})
(println "installing version" version)
(b/install {:basis basis
:lib lib
:version version ;; can't remember why we need to repeat version here, it is in jar-file
:jar-file jar-file
:class-dir class-dir}))
(defn deploy [opts]
(jar opts)
(println "deploy")
((requiring-resolve 'deps-deploy.deps-deploy/deploy)
(merge {:installer :remote
:artifact jar-file
:pom-file (b/pom-path {:lib lib :class-dir class-dir})}
opts))
opts)