API 文档 | MavenPublication |
---|
一个 MavenPublication
表示/配置了 Gradle 如何以 Maven 格式发布内容。你可以通过指定类型为 MavenPublication
,将一个命名的 Maven publication 直接添加到项目的 publishing.publications
容器中。
publishing {
publications {
myPublicationName(MavenPublication) {
// Configure the publication here
}
}
}
默认的 Maven POM 标识属性映射如下
groupId
-project.group
artifactId
-project.name
version
-project.version
对于某些常见用例,通常只需指定要发布的组件即可,无需其他配置 (MavenPublication.from(org.gradle.api.component.SoftwareComponent)
)。发布的组件用于确定要发布的构件以及应在生成的 POM 文件中列出的依赖项。
要向已发布的构件集合中添加其他构件,请使用 MavenPublication.artifact(java.lang.Object)
和 MavenPublication.artifact(java.lang.Object, org.gradle.api.Action)
方法。您也可以使用 MavenPublication.setArtifacts(java.lang.Iterable)
完全替换已发布的构件集合。总之,这些方法让您可以完全控制将发布哪些构件。
要自定义在生成的 POM 中发布的元数据,请通过 MavenPublication.getPom()
方法返回的 POM 上设置属性,例如 MavenPom.getDescription()
,或者直接通过传递给 MavenPublication.pom(org.gradle.api.Action)
的 action(或闭包)进行设置。作为最后的手段,可以使用 MavenPom.withXml(org.gradle.api.Action)
方法修改生成的 POM。
// Example of publishing a Java module with a source artifact and a customized POM plugins { id 'java' id 'maven-publish' } task sourceJar(type: Jar) { from sourceSets.main.allJava archiveClassifier = "sources" } publishing { publications { myPublication(MavenPublication) { from components.java artifact sourceJar pom { name = "Demo" description = "A demonstration of Maven POM customization" url = "http://www.example.com/project" licenses { license { name = "The Apache License, Version 2.0" url = "https://apache.ac.cn/licenses/LICENSE-2.0.txt" } } developers { developer { id = "johnd" name = "John Doe" email = "john.doe@example.com" } } scm { connection = "scm:svn:http://subversion.example.com/svn/project/trunk/" developerConnection = "scm:svn:https://subversion.example.com/svn/project/trunk/" url = "http://subversion.example.com/svn/project/trunk/" } } } } }
属性 | 描述 |
artifactId | 此 publication 的 artifactId。 |
artifacts | 此 publication 的完整构件集合。 |
groupId | 此 publication 的 groupId。 |
pom | 将要发布的 POM。 |
version | 此 publication 的版本。 |
方法 | 描述 |
artifact(source) | 创建要包含在 publication 中的自定义 |
artifact(source, config) | 创建要包含在 publication 中的 |
from(component) | 提供应发布的软件组件。 |
pom(configure) | 配置将要发布的 POM。提供的 action 将对 |
setArtifacts(sources) | 清除 |
suppressAllPomMetadataWarnings() | 隐藏 Maven publication 的所有兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。 |
suppressPomMetadataWarningsFor(variantName) | 隐藏 Maven publication 中指定变体的兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。 |
versionMapping(configureAction) | 配置版本映射策略。例如,对运行时依赖项使用解析后的版本: |
String
artifactId
此 publication 的 artifactId。
MavenArtifactSet
artifacts
此 publication 的完整构件集合。
String
groupId
此 publication 的 groupId。
MavenPom
pom
(只读)
将要发布的 POM。
String
version
此 publication 的版本。
MavenArtifact
artifact
(Object
source)
创建要包含在 publication 中的自定义 MavenArtifact
。`artifact` 方法可以接受多种输入:
- 一个
PublishArtifact
实例。扩展名和分类器值取自包装的实例。 - 一个
AbstractArchiveTask
实例。扩展名和分类器值取自包装的实例。 - 任何可以通过
Project.file(java.lang.Object)
方法解析为File
的内容。扩展名和分类器值从文件名中推断。 - 一个包含 'source' 条目的
Map
,该条目可以解析为任何其他输入类型,包括文件。此 map 可以包含 'classifier' 和 'extension' 条目,以进一步配置构建的构件。
以下示例演示了如何添加各种自定义构件。
plugins { id 'maven-publish' } task sourceJar(type: Jar) { archiveClassifier = "sources" } publishing { publications { maven(MavenPublication) { artifact sourceJar // Publish the output of the sourceJar task artifact 'my-file-name.jar' // Publish a file created outside of the build artifact source: sourceJar, classifier: 'src', extension: 'zip' } } }
MavenArtifact
artifact
(Object
source, Action
<? super MavenArtifact
>
config)
Action
<? super MavenArtifact
>创建要包含在 publication 中的 MavenArtifact
,并通过相关的 action 进行配置。第一个参数用于创建一个自定义构件并将其添加到 publication 中,如 MavenPublication.artifact(java.lang.Object)
所示。然后使用提供的 action 配置创建的 MavenArtifact
,该 action 可以覆盖构件的扩展名或分类器。此方法也接受闭包作为配置 action 参数,通过类型强制转换实现。
plugins { id 'maven-publish' } task sourceJar(type: Jar) { archiveClassifier = "sources" } publishing { publications { maven(MavenPublication) { artifact(sourceJar) { // These values will be used instead of the values from the task. The task values will not be updated. classifier = "src" extension = "zip" } artifact("my-docs-file.htm") { classifier = "documentation" extension = "html" } } } }
void
from
(SoftwareComponent
component)
提供应发布的软件组件。
- 组件声明的任何构件都将包含在 publication 中。
- 组件声明的依赖项将包含在已发布的元数据中。
目前支持 3 种组件类型:'components.java'(由 JavaPlugin 添加)、'components.web'(由 WarPlugin 添加)和 `components.javaPlatform`(由 JavaPlatformPlugin 添加)。对于任何单个 MavenPublication,只能以这种方式提供一个组件。以下示例演示如何将 'java' 组件发布到 Maven 仓库。
plugins { id 'java' id 'maven-publish' } publishing { publications { maven(MavenPublication) { from components.java } } }
配置将要发布的 POM。提供的 action 将对 MavenPublication.getPom()
的结果执行。此方法也接受闭包作为参数,通过类型强制转换实现。
void
setArtifacts
(Iterable
<?>
sources)
Iterable
<?>清除 MavenPublication.getArtifacts()
中任何先前添加的构件,并从指定的源创建构件。每个提供的源都按照 MavenPublication.artifact(java.lang.Object)
的方式解释。例如,要排除组件声明的依赖项并改用自定义的构件集合:
plugins { id 'java' id 'maven-publish' } task sourceJar(type: Jar) { archiveClassifier = "sources" } publishing { publications { maven(MavenPublication) { from components.java artifacts = ["my-custom-jar.jar", sourceJar] } } }
隐藏 Maven publication 的所有兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。
void
suppressPomMetadataWarningsFor
(String
variantName)
隐藏 Maven publication 中指定变体的兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。
void
versionMapping
(Action
<? super VersionMappingStrategy
>
configureAction)
Action
<? super VersionMappingStrategy
>配置版本映射策略。例如,对运行时依赖项使用解析后的版本:
plugins { id 'java' id 'maven-publish' } publishing { publications { maven(MavenPublication) { from components.java versionMapping { usage('java-runtime'){ fromResolutionResult() } } } } }