summaryrefslogtreecommitdiff
path: root/scalalib/src/mill/scalalib
diff options
context:
space:
mode:
authorSheng Chen <shengcer@gmail.com>2018-04-02 16:43:44 -0400
committerNikolay Tatarinov <5min4eq.unity@gmail.com>2018-04-02 23:43:44 +0300
commit8cdc9f1480200bec07b8b05c1e78ee1e1b6a21de (patch)
treea1976fc77533291f5de29252658ed4958ab088c7 /scalalib/src/mill/scalalib
parentf972d712c76bc19c158ea77084abdcbf520d762e (diff)
downloadmill-8cdc9f1480200bec07b8b05c1e78ee1e1b6a21de.tar.gz
mill-8cdc9f1480200bec07b8b05c1e78ee1e1b6a21de.tar.bz2
mill-8cdc9f1480200bec07b8b05c1e78ee1e1b6a21de.zip
revive #254 and fix #268 (#274)
Diffstat (limited to 'scalalib/src/mill/scalalib')
-rw-r--r--scalalib/src/mill/scalalib/Dep.scala14
-rw-r--r--scalalib/src/mill/scalalib/publish/Ivy.scala8
-rw-r--r--scalalib/src/mill/scalalib/publish/Pom.scala28
-rw-r--r--scalalib/src/mill/scalalib/publish/settings.scala16
4 files changed, 54 insertions, 12 deletions
diff --git a/scalalib/src/mill/scalalib/Dep.scala b/scalalib/src/mill/scalalib/Dep.scala
index bd7fce4f..f67eed03 100644
--- a/scalalib/src/mill/scalalib/Dep.scala
+++ b/scalalib/src/mill/scalalib/Dep.scala
@@ -3,6 +3,20 @@ import mill.util.JsonFormatters._
import upickle.default.{macroRW, ReadWriter => RW}
sealed trait Dep {
def configure(attributes: coursier.Attributes): Dep
+ def exclude(exclusions: (String, String)*): Dep =
+ this match {
+ case dep : Dep.Java => dep.copy(dep = dep.dep.copy(exclusions = dep.dep.exclusions ++ exclusions))
+ case dep : Dep.Scala => dep.copy(dep = dep.dep.copy(exclusions = dep.dep.exclusions ++ exclusions))
+ case dep : Dep.Point => dep.copy(dep = dep.dep.copy(exclusions = dep.dep.exclusions ++ exclusions))
+ }
+ def excludeOrg(organizations: String*): Dep = exclude(organizations.map(_ -> "*"): _*)
+ def excludeName(names: String*): Dep = exclude(names.map("*" -> _): _*)
+ def withConfiguration(configuration: String): Dep =
+ this match {
+ case dep : Dep.Java => dep.copy(dep = dep.dep.copy(configuration = configuration))
+ case dep : Dep.Scala => dep.copy(dep = dep.dep.copy(configuration = configuration))
+ case dep : Dep.Point => dep.copy(dep = dep.dep.copy(configuration = configuration))
+ }
}
object Dep{
diff --git a/scalalib/src/mill/scalalib/publish/Ivy.scala b/scalalib/src/mill/scalalib/publish/Ivy.scala
index 644e2c53..22e26ff6 100644
--- a/scalalib/src/mill/scalalib/publish/Ivy.scala
+++ b/scalalib/src/mill/scalalib/publish/Ivy.scala
@@ -41,8 +41,12 @@ object Ivy {
}
private def renderDependency(dep: Dependency) = {
- val scope = scopeToConf(dep.scope)
- <dependency org={dep.artifact.group} name={dep.artifact.id} rev={dep.artifact.version} conf={s"$scope->default(compile)"}></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 {
diff --git a/scalalib/src/mill/scalalib/publish/Pom.scala b/scalalib/src/mill/scalalib/publish/Pom.scala
index 1a86e7de..84cf0632 100644
--- a/scalalib/src/mill/scalalib/publish/Pom.scala
+++ b/scalalib/src/mill/scalalib/publish/Pom.scala
@@ -90,12 +90,28 @@ object Pom {
case Scope.Test => <scope>test</scope>
case Scope.Runtime => <scope>runtime</scope>
}
- <dependency>
- <groupId>{d.artifact.group}</groupId>
- <artifactId>{d.artifact.id}</artifactId>
- <version>{d.artifact.version}</version>
- {scope}
- </dependency>
+ if (d.exclusions.isEmpty)
+ <dependency>
+ <groupId>{d.artifact.group}</groupId>
+ <artifactId>{d.artifact.id}</artifactId>
+ <version>{d.artifact.version}</version>
+ {scope}
+ </dependency>
+ else
+ <dependency>
+ <groupId>{d.artifact.group}</groupId>
+ <artifactId>{d.artifact.id}</artifactId>
+ <version>{d.artifact.version}</version>
+ <exclusions>
+ {d.exclusions.map(ex =>
+ <exclude>
+ <groupId>{ex._1}</groupId>
+ <artifactId>{ex._2}</artifactId>
+ </exclude>
+ )}
+ </exclusions>
+ {scope}
+ </dependency>
}
}
diff --git a/scalalib/src/mill/scalalib/publish/settings.scala b/scalalib/src/mill/scalalib/publish/settings.scala
index 1076fb41..34f7e7ad 100644
--- a/scalalib/src/mill/scalalib/publish/settings.scala
+++ b/scalalib/src/mill/scalalib/publish/settings.scala
@@ -15,7 +15,9 @@ object Artifact {
case Dep.Java(dep, cross) =>
Dependency(
Artifact(dep.module.organization, dep.module.name, dep.version),
- Scope.Compile
+ Scope.Compile,
+ if (dep.configuration == "" ) None else Some(dep.configuration),
+ dep.exclusions.toList
)
case Dep.Scala(dep, cross) =>
Dependency(
@@ -24,7 +26,9 @@ object Artifact {
s"${dep.module.name}_${scalaBin}",
dep.version
),
- Scope.Compile
+ Scope.Compile,
+ if (dep.configuration == "") None else Some(dep.configuration),
+ dep.exclusions.toList
)
case Dep.Point(dep, cross) =>
Dependency(
@@ -33,7 +37,9 @@ object Artifact {
s"${dep.module.name}_${scalaFull}",
dep.version
),
- Scope.Compile
+ Scope.Compile,
+ if (dep.configuration == "") None else Some(dep.configuration),
+ dep.exclusions.toList
)
}
}
@@ -49,7 +55,9 @@ object Scope {
case class Dependency(
artifact: Artifact,
- scope: Scope
+ scope: Scope,
+ configuration: Option[String] = None,
+ exclusions: Seq[(String, String)] = Nil
)
case class Developer(