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 中的自定义 MavenArtifact。`artifact` 方法可以接受多种输入:

artifact(source, config)

创建要包含在 publication 中的 MavenArtifact,并通过相关的 action 进行配置。第一个参数用于创建一个自定义构件并将其添加到 publication 中,如 MavenPublication.artifact(java.lang.Object) 所示。然后使用提供的 action 配置创建的 MavenArtifact,该 action 可以覆盖构件的扩展名或分类器。此方法也接受闭包作为配置 action 参数,通过类型强制转换实现。

from(component)

提供应发布的软件组件。

pom(configure)

配置将要发布的 POM。提供的 action 将对 MavenPublication.getPom() 的结果执行。此方法也接受闭包作为参数,通过类型强制转换实现。

setArtifacts(sources)

清除 MavenPublication.getArtifacts() 中任何先前添加的构件,并从指定的源创建构件。每个提供的源都按照 MavenPublication.artifact(java.lang.Object) 的方式解释。例如,要排除组件声明的依赖项并改用自定义的构件集合:

suppressAllPomMetadataWarnings()

隐藏 Maven publication 的所有兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。

suppressPomMetadataWarningsFor(variantName)

隐藏 Maven publication 中指定变体的兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。

versionMapping(configureAction)

配置版本映射策略。例如,对运行时依赖项使用解析后的版本:

脚本块

没有脚本块

属性详情

String artifactId

此 publication 的 artifactId。

此 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)

创建要包含在 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
    }
  }
}

void pom(Action<? super MavenPom> configure)

配置将要发布的 POM。提供的 action 将对 MavenPublication.getPom() 的结果执行。此方法也接受闭包作为参数,通过类型强制转换实现。

void setArtifacts(Iterable<?> sources)

清除 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]
    }
  }
}

void suppressAllPomMetadataWarnings()

隐藏 Maven publication 的所有兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。

void suppressPomMetadataWarningsFor(String variantName)

隐藏 Maven publication 中指定变体的兼容性警告。当使用了无法完全映射到 Maven POM 的 Gradle 特性时,会发出警告。

void versionMapping(Action<? super VersionMappingStrategy> configureAction)

配置版本映射策略。例如,对运行时依赖项使用解析后的版本:

plugins {
    id 'java'
    id 'maven-publish'
}

publishing {
  publications {
    maven(MavenPublication) {
      from components.java
      versionMapping {
        usage('java-runtime'){
          fromResolutionResult()
        }
      }
    }
  }
}