这个词是什么意思classifiers
?它来自罐子吗?例如在sbt-assembly
插件中:
artifact in (Compile, assembly) ~= { art =>
art.copy(`classifier` = Some("assembly"))
}
这个词是什么意思classifiers
?它来自罐子吗?例如在sbt-assembly
插件中:
artifact in (Compile, assembly) ~= { art =>
art.copy(`classifier` = Some("assembly"))
}
classifier
被 Maven 定义为项目坐标的第五个元素,在、groupId
和之后。artifactId
version
packaging
更具体地说(来自Maven 文档,强调我的):
分类器允许区分从相同 POM 构建但内容不同的工件。它是一些可选且任意的字符串——如果存在的话——被附加到工件名称之后,紧跟在版本号之后。
作为这个元素的动机,例如,考虑一个项目,它提供了一个针对 JRE 1.5 的工件,但同时也提供了一个仍然支持 JRE 1.4 的工件。第一个工件可以配备分类器 jdk15,第二个工件配备 jdk14,以便客户端可以选择使用哪一个。
分类器的另一个常见用例是需要将辅助工件附加到项目的主要工件。如果您浏览 Maven 中央存储库,您会注意到分类器源和 javadoc 用于部署项目源代码和 API 文档以及打包的类文件。
例如,Maven central 不仅包含 normal(无分类器)scala-library-2.10.2.jar
,还包含
scala-library-2.10.2-javadoc.jar
,按照惯例包含文档(即使在这种情况下它包含 scaladoc 而不是 javadoc),scala-library-2.10.2-sources.jar
其中包含来源。这两个额外的工件是使用分类器发布的。
SBT 还允许您将分类器添加到依赖项。从文档:
libraryDependencies += "org.testng" % "testng" % "5.7" classifier "jdk15"
在您的情况下,似乎 sbt-assembly 插件会覆盖所有分类器(仅在组装任务中)以将它们设置为assembly
.
除了@gourlaysama 的回答,请参阅Publishing:
已发布的工件
默认情况下,会发布主二进制 jar、源 jar 和 API 文档 jar。您可以声明其他类型的工件以发布和禁用或修改默认工件。有关详细信息,请参阅工件页面。
和神器:
定义自定义工件
除了配置内置工件外,您还可以声明要发布的其他工件。使用 Ivy 元数据时允许多个工件,但 Maven POM 文件仅支持基于分类器区分工件,这些不会记录在 POM 中。