|
13 | 13 | [clojure.data.xml :as xml] |
14 | 14 | [clojure.data.xml.tree :as tree] |
15 | 15 | [clojure.data.xml.event :as event] |
| 16 | + [clojure.walk :as walk] |
16 | 17 | [clojure.zip :as zip] |
17 | 18 | [clojure.tools.deps.util.maven :as maven] |
18 | 19 | [clojure.tools.deps.util.io :refer [printerrln]] |
|
23 | 24 | [java.util Date])) |
24 | 25 |
|
25 | 26 | (xml/alias-uri 'pom "http://maven.apache.org/POM/4.0.0") |
| 27 | +(def ^:private pom-ns (name (.-name ^clojure.lang.Namespace (get (ns-aliases *ns*) 'pom)))) |
| 28 | + |
26 | 29 |
|
27 | 30 | (defn- to-dep |
28 | 31 | [[lib {:keys [mvn/version exclusions optional] :as coord}]] |
|
88 | 91 | [::pom/repositories |
89 | 92 | (map to-repo repos)]) |
90 | 93 |
|
| 94 | +(defn- pomify |
| 95 | + [val] |
| 96 | + (if (and (vector? val) (keyword? (first val))) |
| 97 | + (into [(keyword pom-ns (name (first val)))] (rest val)) |
| 98 | + val)) |
| 99 | + |
91 | 100 | (defn- gen-pom |
92 | | - [{:keys [deps src-paths resource-paths repos group artifact version scm] |
| 101 | + [{:keys [deps src-paths resource-paths repos group artifact version scm pom-data] |
93 | 102 | :or {version "0.1.0"}}] |
94 | 103 | (let [[path & paths] src-paths |
95 | 104 | {:keys [connection developerConnection tag url]} scm] |
96 | 105 | (xml/sexp-as-element |
97 | | - [::pom/project |
98 | | - {:xmlns "http://maven.apache.org/POM/4.0.0" |
99 | | - (keyword "xmlns:xsi") "http://www.w3.org/2001/XMLSchema-instance" |
100 | | - (keyword "xsi:schemaLocation") "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"} |
101 | | - [::pom/modelVersion "4.0.0"] |
102 | | - [::pom/packaging "jar"] |
103 | | - [::pom/groupId group] |
104 | | - [::pom/artifactId artifact] |
105 | | - [::pom/version version] |
106 | | - [::pom/name artifact] |
107 | | - (gen-deps deps) |
108 | | - (when (or path (seq resource-paths)) |
109 | | - (when (seq paths) (apply printerrln "Skipping paths:" paths)) |
110 | | - [::pom/build |
111 | | - (when path (gen-source-dir path)) |
112 | | - (when (seq resource-paths) (gen-resources resource-paths))]) |
113 | | - (gen-repos repos) |
114 | | - (when scm |
115 | | - [::pom/scm |
116 | | - (when connection [::pom/connection connection]) |
117 | | - (when developerConnection [::pom/developerConnection developerConnection]) |
118 | | - (when tag [::pom/tag tag]) |
119 | | - (when url [::pom/url url])])]))) |
| 106 | + (into |
| 107 | + [::pom/project |
| 108 | + {:xmlns "http://maven.apache.org/POM/4.0.0" |
| 109 | + (keyword "xmlns:xsi") "http://www.w3.org/2001/XMLSchema-instance" |
| 110 | + (keyword "xsi:schemaLocation") "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"} |
| 111 | + [::pom/modelVersion "4.0.0"] |
| 112 | + [::pom/packaging "jar"] |
| 113 | + [::pom/groupId group] |
| 114 | + [::pom/artifactId artifact] |
| 115 | + [::pom/version version] |
| 116 | + [::pom/name artifact] |
| 117 | + (gen-deps deps) |
| 118 | + (when (or path (seq resource-paths)) |
| 119 | + (when (seq paths) (apply printerrln "Skipping paths:" paths)) |
| 120 | + [::pom/build |
| 121 | + (when path (gen-source-dir path)) |
| 122 | + (when (seq resource-paths) (gen-resources resource-paths))]) |
| 123 | + (gen-repos repos) |
| 124 | + (when scm |
| 125 | + [::pom/scm |
| 126 | + (when connection [::pom/connection connection]) |
| 127 | + (when developerConnection [::pom/developerConnection developerConnection]) |
| 128 | + (when tag [::pom/tag tag]) |
| 129 | + (when url [::pom/url url])])] |
| 130 | + (walk/postwalk pomify pom-data))))) |
120 | 131 |
|
121 | 132 | (defn- make-xml-element |
122 | 133 | [{:keys [tag attrs] :as node} children] |
|
221 | 232 |
|
222 | 233 | (defn write-pom |
223 | 234 | [params] |
224 | | - (let [{:keys [basis class-dir target src-pom lib version scm src-dirs resource-dirs repos]} params |
| 235 | + (let [{:keys [basis class-dir target src-pom lib version scm src-dirs resource-dirs repos pom-data]} params |
225 | 236 | {:keys [libs]} basis |
226 | 237 | root-deps (libs->deps libs) |
227 | 238 | src-pom-file (api/resolve-path (or src-pom "pom.xml")) |
|
246 | 257 | :group (namespace lib) |
247 | 258 | :artifact (name lib)} |
248 | 259 | version (assoc :version version) |
249 | | - scm (assoc :scm scm)))) |
| 260 | + scm (assoc :scm scm) |
| 261 | + pom-data (assoc :pom-data pom-data)))) |
250 | 262 | pom-dir-file (file/ensure-dir |
251 | 263 | (cond |
252 | 264 | class-dir (jio/file (api/resolve-path class-dir) (meta-maven-path {:lib lib})) |
|
0 commit comments