gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:34:57 24 4
gpt4 key购买 nike

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

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

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

libraryDependencies ++= Seq(
"org.scalactic" %% "scalactic" % "3.0.0" % Test,
"org.scalatest" %% "scalatest" % "3.0.0" % Test
)

POM 的部分:

<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>

显然需要测试范围,以防止使用此库的另一个项目(主项目)出现问题。特别是主项目的测试另外包含了这些测试库,导致版本冲突等问题。

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

最佳答案

这里提出了类似的问题:sbt - exclude certain dependency only during publish .

重复the answer由 lyomi 提供,以下是如何排除所有 <dependency>包含子元素 <scope> 的元素元素,包括testprovided .

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:

<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>

关于scala - 如何防止 SBT 将测试依赖项包含到 POM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41670018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com