@@ -57,7 +57,7 @@ The remainder of this guide demonstrates individual common use cases and how to
57
57
58
58
The most common Clojure build creates a jar file containing Clojure source code. To do this with tools.build we'll use the following tasks:
59
59
60
- * `create-basis` - to create a project basis
60
+ * `create-basis` - to create a project basis (note: this will download deps as a side effect)
61
61
* `copy-dir` - to copy Clojure source and resources into a working dir
62
62
* `write-pom` - to write a pom file in the working dir
63
63
* `jar` - to jar up the working dir into a jar file
@@ -72,17 +72,19 @@ The build.clj will look like this:
72
72
(def lib 'my/lib1)
73
73
(def version (format "1.2.%s" (b/git-count-revs nil)))
74
74
(def class-dir "target/classes")
75
- (def basis (b/create-basis {:project "deps.edn"}))
76
75
(def jar-file (format "target/%s-%s.jar" (name lib) version))
77
76
77
+ ;; delay to defer side effects (artifact downloads)
78
+ (def basis (delay (b/create-basis {:project "deps.edn"})))
79
+
78
80
(defn clean [_]
79
81
(b/delete {:path "target"}))
80
82
81
83
(defn jar [_]
82
84
(b/write-pom {:class-dir class-dir
83
85
:lib lib
84
86
:version version
85
- :basis basis
87
+ :basis @ basis
86
88
:src-dirs ["src"]})
87
89
(b/copy-dir {:src-dirs ["src" "resources"]
88
90
:target-dir class-dir})
@@ -148,23 +150,25 @@ An example build for a compiled uberjar will look like this:
148
150
(def lib 'my/lib1)
149
151
(def version (format "1.2.%s" (b/git-count-revs nil)))
150
152
(def class-dir "target/classes")
151
- (def basis (b/create-basis {:project "deps.edn"}))
152
153
(def uber-file (format "target/%s-%s-standalone.jar" (name lib) version))
153
154
155
+ ;; delay to defer side effects (artifact downloads)
156
+ (def basis (delay (b/create-basis {:project "deps.edn"})))
157
+
154
158
(defn clean [_]
155
159
(b/delete {:path "target"}))
156
160
157
161
(defn uber [_]
158
162
(clean nil)
159
163
(b/copy-dir {:src-dirs ["src" "resources"]
160
164
:target-dir class-dir})
161
- (b/compile-clj {:basis basis
165
+ (b/compile-clj {:basis @ basis
162
166
:ns-compile '[my.lib.main]
163
167
:class-dir class-dir})
164
168
(b/uber {:class-dir class-dir
165
169
:uber-file uber-file
166
- :basis basis
167
- :main 'my.lib.main}))
170
+ :basis @ basis
171
+ :main 'my.lib.main})))
168
172
----
169
173
170
174
This example directs `compile-clj` to compile the main namespace (by default source will be loaded from the basis :paths). Compilation is transitive and all namespaces loaded by the compiled namespace will also be compiled. You may need to add additional namespaces if code is dynamically or optionally loaded.
@@ -199,10 +203,12 @@ For example, consider a parameterization that includes an extra set of dev resou
199
203
(def lib 'my/lib1)
200
204
(def version (format "1.2.%s" (b/git-count-revs nil)))
201
205
(def class-dir "target/classes")
202
- (def basis (b/create-basis {:project "deps.edn"}))
203
206
(def jar-file (format "target/%s-%s.jar" (name lib) version))
204
207
(def copy-srcs ["src" "resources"])
205
208
209
+ ;; delay to defer side effects (artifact downloads)
210
+ (def basis (delay (b/create-basis {:project "deps.edn"})))
211
+
206
212
(defn clean [params]
207
213
(b/delete {:path "target"})
208
214
params)
@@ -212,7 +218,7 @@ For example, consider a parameterization that includes an extra set of dev resou
212
218
(b/write-pom {:class-dir class-dir
213
219
:lib lib
214
220
:version version
215
- :basis basis
221
+ :basis @ basis
216
222
:src-dirs ["src"]})
217
223
(b/copy-dir {:src-dirs srcs
218
224
:target-dir class-dir})
@@ -246,24 +252,26 @@ This build creates a jar with classes compiled from Java sources and your Clojur
246
252
(def lib 'my/lib1)
247
253
(def version (format "1.2.%s" (b/git-count-revs nil)))
248
254
(def class-dir "target/classes")
249
- (def basis (b/create-basis {:project "deps.edn"}))
250
255
(def jar-file (format "target/%s-%s.jar" (name lib) version))
251
256
257
+ ;; delay to defer side effects (artifact downloads)
258
+ (def basis (delay (b/create-basis {:project "deps.edn"})))
259
+
252
260
(defn clean [_]
253
261
(b/delete {:path "target"}))
254
262
255
263
(defn compile [_]
256
264
(b/javac {:src-dirs ["java"]
257
265
:class-dir class-dir
258
- :basis basis
266
+ :basis @ basis
259
267
:javac-opts ["--release" "11"]}))
260
268
261
269
(defn jar [_]
262
270
(compile nil)
263
271
(b/write-pom {:class-dir class-dir
264
272
:lib lib
265
273
:version version
266
- :basis basis
274
+ :basis @ basis
267
275
:src-dirs ["src"]})
268
276
(b/copy-dir {:src-dirs ["src" "resources"]
269
277
:target-dir class-dir})
0 commit comments