-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.clj
56 lines (50 loc) · 1.99 KB
/
install.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
(ns ^{:author "Jeremy Schoffen"
:doc "
Api providing a maven install utilities.
"}
fr.jeremyschoffen.mbt.alpha.core.maven.install
(:require
[clojure.tools.deps.alpha.util.maven :as tools-maven]
[fr.jeremyschoffen.mbt.alpha.core.maven.common :as common]
[fr.jeremyschoffen.mbt.alpha.core.specs]
[fr.jeremyschoffen.mbt.alpha.utils :as u])
(:import
[org.eclipse.aether.installation InstallRequest]))
(u/pseudo-nss
maven
maven.deploy
maven.install
project)
(defn make-install-request [param]
(let [request (InstallRequest.)
artefacts (common/make-maven-artefacts param)]
(doseq [a artefacts]
(.addArtifact request a))
request))
(u/spec-op make-install-request
:deps [common/make-maven-artefacts]
:param {:req [::maven/artefact-name
::maven/group-id
::project/version
::maven.deploy/artefacts]
:opt [::maven/classifier]})
(defn install!
"Locally install maven artefacts. Some key parameters:
- `:maven.deploy/artefacts`: sequence of maps respecting the `:maven.deploy/artefact` spec. These represents the
artefacts to deploy like jars, pom.xml files, etc...
- `:maven.install/dir`: optional parameter allowing the installation dir to be different from the default local repo."
[{install-dir ::maven.install/dir
:or {install-dir common/default-local-repo}
:as param}]
(let [system (tools-maven/make-system)
session (tools-maven/make-session system (str install-dir))
install-request (make-install-request param)]
(.install system session install-request)))
(u/spec-op install!
:deps [make-install-request]
:param {:req [::maven/artefact-name
::maven/group-id
::project/version
::maven.deploy/artefacts]
:opt [::maven/classifier
::maven.install/dir]})