MavenPublication

MavenPublication 是 Gradle 如何以 Maven 格式发布内容的表示/配置。您可以通过提供 MavenPublication 作为类型,直接将命名的 Maven 发布添加到项目的 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 中发布的元数据,请设置属性,例如 MavenPom.getDescription(),通过 MavenPublication.getPom() 方法返回的 POM 或直接通过传递到 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

此发布的 artifactId。

artifacts

此发布的完整构件集合。

groupId

此发布的 groupId。

pom

将要发布的 POM。

version

此发布的版本。

方法

方法描述
artifact(source)

创建要包含在发布中的自定义 MavenArtifactartifact 方法可以接受各种输入

artifact(source, config)

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

from(component)

提供应发布的软件组件。

pom(configure)

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

setArtifacts(sources)

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

suppressAllPomMetadataWarnings()

静默 Maven 发布的所有兼容性警告。当使用无法完全映射到 Maven POM 的 Gradle 功能时,会发出警告。

suppressPomMetadataWarningsFor(variantName)

静默指定变体 Maven 发布的兼容性警告。当使用无法完全映射到 Maven POM 的 Gradle 功能时,会发出警告。

versionMapping(configureAction)

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

脚本块

无脚本块

属性详情

String artifactId

此发布的 artifactId。

此发布的完整构件集合。

String groupId

此发布的 groupId。

MavenPom pom (只读)

将要发布的 POM。

String version

此发布的版本。

方法详情

MavenArtifact artifact(Object source)

创建要包含在发布中的自定义 MavenArtifactartifact 方法可以接受各种输入

  • PublishArtifact 实例。扩展名和分类符值取自包装的实例。
  • AbstractArchiveTask 实例。扩展名和分类符值取自包装的实例。
  • 可以通过 Project.file(java.lang.Object) 方法解析为 File 的任何内容。扩展名和分类符值从文件名中插值。
  • 包含可解析为任何其他输入类型(包括文件)的“source”条目的 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)

创建要包含在发布中的 MavenArtifact,它由关联的 action 配置。第一个参数用于创建自定义构件并将其添加到发布中,如 MavenPublication.artifact(java.lang.Object) 所示。然后使用提供的 action 配置创建的 MavenArtifact,这可以覆盖构件的扩展名或分类符。此方法还接受配置 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)

提供应发布的软件组件。

  • 组件声明的任何构件都将包含在发布中。
  • 组件声明的依赖项将包含在已发布的元数据中。

目前支持 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 发布的所有兼容性警告。当使用无法完全映射到 Maven POM 的 Gradle 功能时,会发出警告。

void suppressPomMetadataWarningsFor(String variantName)

静默指定变体 Maven 发布的兼容性警告。当使用无法完全映射到 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()
        }
      }
    }
  }
}