blob: e06efadd4c8599b01a6b9bd99043335866fcfcf1 (
plain) (
blame)
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
|
package mill.scalalib.publish
import mill.api.Loose.Agg
import scala.xml.PrettyPrinter
object Ivy {
val head = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
def apply(
artifact: Artifact,
dependencies: Agg[Dependency]
): String = {
val xml =
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info
organisation={artifact.group} module={artifact.id} revision={artifact.version} status="release">
<description/>
</info>
<configurations>
<conf name="pom" visibility="public" description=""/>
<conf extends="runtime" name="test" visibility="public" description=""/>
<conf name="provided" visibility="public" description=""/>
<conf name="optional" visibility="public" description=""/>
<conf name="compile" visibility="public" description=""/>
<conf extends="compile" name="runtime" visibility="public" description=""/>
</configurations>
<publications>
<artifact name={artifact.id} type="pom" ext="pom" conf="pom"/>
<artifact name={artifact.id} type="jar" ext="jar" conf="compile"/>
<artifact name={artifact.id} type="src" ext="jar" conf="compile" e:classifier="sources"/>
<artifact name={artifact.id} type="doc" ext="jar" conf="compile" e:classifier="javadoc"/>
</publications>
<dependencies>{dependencies.map(renderDependency).toSeq}</dependencies>
</ivy-module>
val pp = new PrettyPrinter(120, 4)
head + pp.format(xml).replaceAll(">", ">")
}
private def renderDependency(dep: Dependency) = {
if (dep.exclusions.isEmpty)
<dependency org={dep.artifact.group} name={dep.artifact.id} rev={dep.artifact.version} conf={s"${scopeToConf(dep.scope)}->${dep.configuration.getOrElse("default(compile)")}"} />
else
<dependency org={dep.artifact.group} name={dep.artifact.id} rev={dep.artifact.version} conf={s"${scopeToConf(dep.scope)}->${dep.configuration.getOrElse("default(compile)")}"}>
{dep.exclusions.map(ex => <exclude org={ex._1} name={ex._2} matcher="exact"/>)}
</dependency>
}
private def scopeToConf(s: Scope): String = s match {
case Scope.Compile => "compile"
case Scope.Provided => "provided"
case Scope.Test => "test"
case Scope.Runtime => "runtime"
}
}
|