sbt - 仅在发布期间排除某些依赖项
sbt - exclude certain dependency only during publish
我正在构建一个实用程序库,可以与 Apache Spark 1.0、1.1、1.2 版本之一一起使用。
因为它们都是二进制向后兼容的,我想让用户决定使用哪个 spark 版本(通过手动添加 spark-core
和首选版本作为我的库的依赖项),然后做不在库的 POM 中强加任何版本限制。否则它会用依赖项驱逐警告惹恼用户。
是否可以在不更改任何编译行为的情况下让 sbt 忽略已发布 POM 中的库依赖项?
是的,provided
配置是专门为此设计的:
libraryDependencies += "org" %% "artifact" % "1.0" % "provided"
将在编译期间将所述库放在类路径中,但不会放在 POM 文件中。
以下是我借助sjrd的帮助写的sbt设置
import scala.xml.{Node => XmlNode, NodeSeq => XmlNodeSeq, _}
import scala.xml.transform.{RewriteRule, RuleTransformer}
pomPostProcess := { (node: XmlNode) =>
new RuleTransformer(new RewriteRule {
override def transform(node: XmlNode): XmlNodeSeq = node match {
case e: Elem if e.label == "dependency" && e.child.exists(child => child.label == "scope" && child.text == "provided") =>
val organization = e.child.filter(_.label == "groupId").flatMap(_.text).mkString
val artifact = e.child.filter(_.label == "artifactId").flatMap(_.text).mkString
val version = e.child.filter(_.label == "version").flatMap(_.text).mkString
Comment(s"provided dependency $organization#$artifact;$version has been omitted")
case _ => node
}
}).transform(node).head
}
我正在构建一个实用程序库,可以与 Apache Spark 1.0、1.1、1.2 版本之一一起使用。
因为它们都是二进制向后兼容的,我想让用户决定使用哪个 spark 版本(通过手动添加 spark-core
和首选版本作为我的库的依赖项),然后做不在库的 POM 中强加任何版本限制。否则它会用依赖项驱逐警告惹恼用户。
是否可以在不更改任何编译行为的情况下让 sbt 忽略已发布 POM 中的库依赖项?
是的,provided
配置是专门为此设计的:
libraryDependencies += "org" %% "artifact" % "1.0" % "provided"
将在编译期间将所述库放在类路径中,但不会放在 POM 文件中。
以下是我借助sjrd的帮助写的sbt设置
import scala.xml.{Node => XmlNode, NodeSeq => XmlNodeSeq, _}
import scala.xml.transform.{RewriteRule, RuleTransformer}
pomPostProcess := { (node: XmlNode) =>
new RuleTransformer(new RewriteRule {
override def transform(node: XmlNode): XmlNodeSeq = node match {
case e: Elem if e.label == "dependency" && e.child.exists(child => child.label == "scope" && child.text == "provided") =>
val organization = e.child.filter(_.label == "groupId").flatMap(_.text).mkString
val artifact = e.child.filter(_.label == "artifactId").flatMap(_.text).mkString
val version = e.child.filter(_.label == "version").flatMap(_.text).mkString
Comment(s"provided dependency $organization#$artifact;$version has been omitted")
case _ => node
}
}).transform(node).head
}