sbt - sbt 中多个测试包的多个 jar

标签 sbt sbt-native-packager sbt-plugin

sbt(自定义任务或插件)有什么方法可以将包打包到单独的 jar 中。

alt

例如:- 在这个示例项目中,应该为包eg1、eg2、eg3、eg4、eg49、eg50生成6个jar文件

鉴于,任何包之间都不存在相互依赖性。 简化项目供引用:- https://github.com/moglideveloper/MultipleSpecJars


最终编辑:-

我成功地使用以下任务创建了具有正则表达式名称的 jar 文件(其中正则表达式指向某个包名称):-

sbt createCompactJar

现在,我陷入了如何将其重用于一系列正则表达式的困境。

下面是 createCompactJar 的简化逻辑:-

lazy val multipleSpecJars = (project in file("."))
  .settings(libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.2")

//A different configuration which would redefine the packageBin task within this new configuration
//so it does not change the original definition of packageBin
lazy val CompactJar = config("compactJar").extend(Compile)
inConfig(CompactJar)(Defaults.compileSettings)

val allRegexes = List("eg1", "eg2", "eg3", "eg4", "eg49", "eg50")

/*
Below logic only works for one regex (regexToInclude),
How to convert this logic for a sequence of regexes(allRegexes) ?
 */
val regexToInclude = "eg3"

lazy val createCompactJar = taskKey[Unit]("create compact jar based on regex")

/*
createCompactJar
1. Depends on packageBin sbt task.
2. call packageBin and then rename jar that is generated by
   packageBin in same directory to <regex>.jar
 */
createCompactJar := {
  println("now creating jar for regex : " + regexToInclude)
  (packageBin in CompactJar).value

  //Logic to rename generated jar file to <regex>.jar
  val jarFileDir = (baseDirectory).value + "/target/scala-2.12"
  val jarFilePath = jarFileDir + "/multiplespecjars_2.12-0.1.0-SNAPSHOT-compactJar.jar"
  val sourceFile = new File(jarFilePath)
  val destinationFile = new File(jarFileDir + "/" + regexToInclude + ".jar")
  println(s"renaming $sourceFile to $destinationFile")
  sourceFile.renameTo(destinationFile)
}

mappings in(CompactJar, packageBin) := {
  val original = (mappings in(CompactJar, packageBin)).value
  original.filter { case (file, toPath) => toPath.startsWith(regexToInclude) }
}

unmanagedSourceDirectories in CompactJar := (unmanagedSourceDirectories in Compile).value

最佳答案

我会选择subprojects 。我必须承认我不完全理解您的用例(为什么您首先要打包测试?),但是子项目允许您彼此独立地打包内容。您甚至可以获得开箱即用的并行编译,甚至可以在子项目之间具有依赖关系,但您似乎不需要任何依赖关系。

Here是一个更大的例子。

希望这有帮助。干杯,编码愉快! :)

关于sbt - sbt 中多个测试包的多个 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63731555/

相关文章:

docker - 如何将-mem传递给dockerized Play应用程序

scala - 如何使sbt-native-packager结合两层docker镜像

scalatest - 未知神器 sbtplugin 使用 scala 2.12 的 super 安全编译器

scala - 非托管 jar 文件中的 SBT 插件

sbt - 如何设置具有继承和共享依赖项的多项目 SBT 项目

sbt - 如何将最新的 Akka-HTTP 和 Akka-stream 添加到 build.sbt

apache-spark - sbt - 构建 Spark 需要太多时间

java - 如何获取play Framework 2.7中的资源?

SBT 子项目无法识别插件命令

scala - 不同 sbt key 运算符的用例