classifiers
一词的含义是什么?它来自罐子吗?例如,在sbt-assembly
插件中:
artifact in (Compile, assembly) ~= { art =>
art.copy(`classifier` = Some("assembly"))
}
答案 0 :(得分:14)
classifier
,groupId
,artifactId
和version
之后, packaging
被Maven定义为项目坐标的第五个元素。
更具体地说(来自maven documentation,强调我的):
分类器允许区分从同一个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"
在您的情况下,似乎sbt-assembly插件会覆盖所有分类器(仅在汇编任务中)以将它们设置为assembly
。
答案 1 :(得分:1)
除了@ gourlaysama的回答,请参阅Publishing:
已发布的工件
默认情况下,发布主二进制jar,源jar和API文档jar。您可以声明其他类型的工件以发布和禁用或修改默认工件。有关详细信息,请参阅Artifacts页面。
定义自定义工件
除了配置内置工件之外,您还可以声明要发布的其他工件。使用Ivy元数据时允许多个工件,但Maven POM文件仅支持基于分类器区分工件,并且这些工件不会记录在POM中。