scala – 如何防止SBT将测试依赖项包含到POM中
发布时间:2020-12-16 19:15:07 所属栏目:安全 来源:网络整理
导读:我有一个小的实用程序 scala构建与专用测试文件夹下的测试类.编译然后发布本地在我的本地存储库中创建包. 正如所料,测试文件夹会自动从实用程序包的本地jar中排除. 但是,生成的POM仍包含sbt中定义的相关依赖项. SBT依赖项: libraryDependencies ++= Seq( "o
我有一个小的实用程序
scala构建与专用测试文件夹下的测试类.编译然后发布本地在我的本地存储库中创建包.
正如所料,测试文件夹会自动从实用程序包的本地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.
Roming于the answer由lyomi提供,以下是您如何排除所有<依赖>包含子项的元素< scope>元素,包括测试和提供. 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- twitter-bootstrap-3 – Bootstrap Datepicker多
- angularjs – 是否可以设置ng-view来替换:true?
- linux下非root用户运行tomcat
- bootstrap菜单、按钮及导航学习笔记5-15导航(基
- scala – 无法使用案例类从RDD的Row创建数据框
- WebService 部署,报allowDefinition='Machi
- Scala对象的字段在每次使用时都会初始化
- unix – 如何使用Wget下载XML网页
- angularjs – 调用$location.search()后更新ui-r
- Bootstrap学习:Bootstrap 网格系统
热点阅读