什么是SBT中的分类器

10 scala jar sbt sbt-assembly

这个词的含义是什么classifiers?它来自罐子吗?例如在sbt-assembly插件中:

artifact in (Compile, assembly) ~= { art =>
  art.copy(`classifier` = Some("assembly"))
}
Run Code Online (Sandbox Code Playgroud)

gou*_*ama 14

classifier通过Maven的定义为一个项目的第五元素坐标,之后groupId,artifactId,versionpackaging.

更具体地说(来自maven文档,强调我的):

分类器允许区分从相同POM构建但其内容不同的工件.它是一些可选的任意字符串 - 如果存在 - 将附加到版本号之后的工件名称.

作为此元素的动机,请考虑一个项目,该项目提供针对JRE 1.5的工件,但同时也是一个仍支持JRE 1.4的工件.第一个工件可以配备分类器jdk15,第二个工件配备jdk14,以便客户端可以选择使用哪个.

分类器的另一个常见用例是需要将辅助工件附加到项目的主工件.如果浏览Maven中央存储库,您会注意到分类器源和javadoc用于部署项目源代码和API文档以及打包的类文件.

例如,Maven central不仅包含普通(没有分类器)scala-library-2.10.2.jar,还包含

  • scala-library-2.10.2-javadoc.jar按惯例,它包含文档(即使在这种情况下它包含scaladoc而不是javadoc),
  • scala-library-2.10.2-sources.jar 其中包含来源.

这两个额外的工件与分类器一起发布.

SBT还允许您向依赖项添加分类器.来自doc:

libraryDependencies += "org.testng" % "testng" % "5.7" classifier "jdk15"
Run Code Online (Sandbox Code Playgroud)

在您的情况下,似乎sbt-assembly插件会覆盖所有分类器(仅在组装任务中)以将它们设置为assembly.