首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止SBT将测试依赖项包含到POM中

如何防止SBT将测试依赖项包含到POM中
EN

Stack Overflow用户
提问于 2017-01-16 05:31:25
回答 1查看 1.6K关注 0票数 10

我有一个小型实用程序scala构建,它的测试类位于一个专用的测试文件夹下。编译然后publish-local在我的本地存储库中创建包。

正如预期的那样,测试文件夹将自动排除在实用程序包的本地jar中。

但是,生成的POM仍然包含sbt中定义的相关依赖项。SBT依赖项:

代码语言:javascript
复制
libraryDependencies ++= Seq(
  "org.scalactic" %% "scalactic" % "3.0.0" % Test,
  "org.scalatest" %% "scalatest" % "3.0.0" % Test
)

“行动纲领”部分:

代码语言:javascript
复制
<dependency>
    <groupId>org.scalactic</groupId>
    <artifactId>scalactic_2.11</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.scalatest</groupId>
    <artifactId>scalatest_2.11</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>

该范围显然需要进行测试,以防止在使用此库的另一个项目(main)中出现问题。特别是,主要项目的测试包括这些测试库,这会导致版本冲突等。

由于这些依赖项仅用于未包含的测试包,因此在POM中列出它们似乎很愚蠢。如何告诉SBT不要将这些测试范围依赖项包含到最终的POM中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-19 07:07:21

这里有一个类似的问题:sbt - exclude certain dependency only during publish

在lyomi提供的the answer上翻阅,下面是如何排除包含子<scope>元素的所有<dependency>元素,包括testprovided

代码语言:javascript
复制
import scala.xml.{Node => XmlNode, NodeSeq => XmlNodeSeq, _}
import scala.xml.transform.{RewriteRule, RuleTransformer}

// skip dependency elements with a scope
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") =>
        def txt(label: String): String = "\"" + e.child.filter(_.label == label).flatMap(_.text).mkString + "\""
        Comment(s""" scoped dependency ${txt("groupId")} % ${txt("artifactId")} % ${txt("version")} % ${txt("scope")} has been omitted """)
      case _ => node
    }
  }).transform(node).head
}

这将生成如下所示的POM:

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.12.5</version>
    </dependency>
    <!-- scoped dependency "org.scalatest" % "scalatest_2.12" % "3.0.5" % "test" has been omitted -->
</dependencies> 
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41670018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档