diff options
author | Guillaume R <theelectronwill@gmail.com> | 2019-07-24 02:10:00 +0200 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2019-07-24 08:10:00 +0800 |
commit | 1f0d223c1de438071645c7788174fb708ca55043 (patch) | |
tree | 9371d141c9a1ad3c50f7392055fed64d69f0e7e8 /scalalib/src/publish | |
parent | bf9648c08fc8fc0c50f46ff4147d6bfe7f432bcf (diff) | |
download | mill-1f0d223c1de438071645c7788174fb708ca55043.tar.gz mill-1f0d223c1de438071645c7788174fb708ca55043.tar.bz2 mill-1f0d223c1de438071645c7788174fb708ca55043.zip |
Ease the declaration of optional dependencies + handle them in maven and ivy publications (#661)
* Add Dep.optional() to fix #603
* Publish optional dependencies as such
Diffstat (limited to 'scalalib/src/publish')
-rw-r--r-- | scalalib/src/publish/Ivy.scala | 17 | ||||
-rw-r--r-- | scalalib/src/publish/Pom.scala | 5 | ||||
-rw-r--r-- | scalalib/src/publish/settings.scala | 4 |
3 files changed, 18 insertions, 8 deletions
diff --git a/scalalib/src/publish/Ivy.scala b/scalalib/src/publish/Ivy.scala index e06efadd..1f5c8152 100644 --- a/scalalib/src/publish/Ivy.scala +++ b/scalalib/src/publish/Ivy.scala @@ -42,18 +42,21 @@ object Ivy { 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)")}"} /> + <dependency org={dep.artifact.group} name={dep.artifact.id} rev={dep.artifact.version} conf={s"${depIvyConf(dep)}->${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)")}"}> + <dependency org={dep.artifact.group} name={dep.artifact.id} rev={dep.artifact.version} conf={s"${depIvyConf(dep)}->${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" + private def depIvyConf(d: Dependency): String = { + if (d.optional) "optional" + else d.scope match { + case Scope.Compile => "compile" + case Scope.Provided => "provided" + case Scope.Test => "test" + case Scope.Runtime => "runtime" + } } } diff --git a/scalalib/src/publish/Pom.scala b/scalalib/src/publish/Pom.scala index a7f1f6fc..afa9d69e 100644 --- a/scalalib/src/publish/Pom.scala +++ b/scalalib/src/publish/Pom.scala @@ -90,12 +90,16 @@ object Pom { case Scope.Test => <scope>test</scope> case Scope.Runtime => <scope>runtime</scope> } + + val optional = if (d.optional) <optional>true</optional> else NodeSeq.Empty + if (d.exclusions.isEmpty) <dependency> <groupId>{d.artifact.group}</groupId> <artifactId>{d.artifact.id}</artifactId> <version>{d.artifact.version}</version> {scope} + {optional} </dependency> else <dependency> @@ -111,6 +115,7 @@ object Pom { )} </exclusions> {scope} + {optional} </dependency> } diff --git a/scalalib/src/publish/settings.scala b/scalalib/src/publish/settings.scala index d2801752..d17b8e4a 100644 --- a/scalalib/src/publish/settings.scala +++ b/scalalib/src/publish/settings.scala @@ -28,7 +28,8 @@ object Artifact { dep.dep.version ), Scope.Compile, - if (dep.dep.configuration == "") None else Some(dep.dep.configuration.value), + dep.dep.optional, + if (dep.dep.configuration.isEmpty) None else Some(dep.dep.configuration.value), dep.dep.exclusions.toList.map{case (a, b) => (a.value, b.value)} ) } @@ -45,6 +46,7 @@ object Scope { case class Dependency( artifact: Artifact, scope: Scope, + optional: Boolean = false, configuration: Option[String] = None, exclusions: Seq[(String, String)] = Nil ) |