diff options
Diffstat (limited to 'scalalib/src')
-rw-r--r-- | scalalib/src/mill/scalalib/Dep.scala | 14 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/publish/Ivy.scala | 8 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/publish/Pom.scala | 28 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/publish/settings.scala | 16 |
4 files changed, 54 insertions, 12 deletions
diff --git a/scalalib/src/mill/scalalib/Dep.scala b/scalalib/src/mill/scalalib/Dep.scala index 78f454f2..f20480b7 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..3b271fa8 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"${dep.scope}->default(${dep.configuration.getOrElse("compile")})"} /> + else + <dependency org={dep.artifact.group} name={dep.artifact.id} rev={dep.artifact.version} conf={s"${dep.scope}->default(${dep.configuration.getOrElse("compile")})"}> + {dep.exclusions.map(ex => <exclude org={ex._1} name={ex._2} matcher="exact"/>).toSeq} + </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..3c8ba4dc 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> + )}.toSeq + </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( |