Maven发布

API文档:MavenPublication

AMavenPublication是 Gradle 应如何以 Maven 格式发布内容的表示/配置。您可以通过提供类型来 直接将命名的 Maven 发布添加到项目的publishing.publications容器中。MavenPublication

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()返回的 POM 上设置属性,例如。作为最后的手段,可以使用该方法修改生成的 POM。 MavenPublication.getPom()MavenPublication.pom(org.gradle.api.Action)MavenPom.withXml(org.gradle.api.Action)

使用源工件和自定义 POM 发布 Java 模块的示例

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 = "http://www.apache.org/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)

MavenArtifact创建要包含在出版物中的自定义。该artifact方法可以采用多种输入:

artifact(source, config)

创建MavenArtifact要包含在发布中的内容,该发布由关联操作配置。第一个参数用于创建自定义工件并将其添加到出版物中,按照MavenPublication.artifact(java.lang.Object)。然后使用提供的操作配置创建的内容MavenArtifact,该操作可以覆盖工件的扩展或分类器。此方法还通过强制类型接受配置操作作为闭包参数。

from(component)

提供应发布的软件组件。

pom(configure)

配置将要发布的 POM。将根据结果执行提供的操作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 artifactObject来源)

MavenArtifact创建要包含在出版物中的自定义。该artifact方法可以采用多种输入:

  • 一个PublishArtifact例子。扩展和分类器值取自包装实例。
  • 一个AbstractArchiveTask例子。扩展和分类器值取自包装实例。
  • File任何可以通过方法解决的事情Project.file(java.lang.Object)。扩展名和分类器值是根据文件名插入的。
  • Map包含可解析为任何其他输入类型(包括文件)的“源”条目。该映射可以包含“分类器”和“扩展”条目以进一步配置构造的工件。

以下示例演示了各种自定义工件的添加。

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 artifactObject来源,配置)Action<? super MavenArtifact>

创建MavenArtifact要包含在发布中的内容,该发布由关联操作配置。第一个参数用于创建自定义工件并将其添加到出版物中,按照MavenPublication.artifact(java.lang.Object)。然后使用提供的操作配置创建的内容MavenArtifact,该操作可以覆盖工件的扩展或分类器。此方法还通过强制类型接受配置操作作为闭包参数。

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 fromSoftwareComponent成分)

提供应发布的软件组件。

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

目前支持 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>

配置将要发布的 POM。将根据结果执行提供的操作MavenPublication.getPom()。此方法还通过类型强制接受闭包参数。

void setArtifactsIterable<?>来源)

从指定源清除任何先前添加的工件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变体名称)

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

void versionMapping(配置动作)Action<? super VersionMappingStrategy>

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

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

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