IvyPublication

API 文档IvyPublication

一个 IvyPublication 是 Gradle 如何以 Ivy 格式发布内容到 Ivy 仓库的表示/配置。通过提供 IvyPublication 作为类型,您可以直接向项目的 publishing.publications 容器添加一个命名的 Ivy publication。

publishing {
  publications {
    myPublicationName(IvyPublication) {
      // Configure the publication here
    }
  }
}

此 publication 的 Ivy 模块标识属性映射如下:

  • module - project.name
  • organisation - project.group
  • revision - project.version
  • status - project.status

对于某些常见用例,通常只需使用 IvyPublication.from(org.gradle.api.component.SoftwareComponent) 指定要发布的组件即可。发布的组件用于确定要发布哪些 artifact,以及在生成的 ivy 描述符文件中应列出哪些配置和依赖项。

您可以通过向 IvyPublication.configurations(org.gradle.api.Action) 方法提供 Closure,将配置添加到生成的 ivy 描述符文件中。

要向发布的 artifact 集合中添加额外的 artifact,请使用 IvyPublication.artifact(java.lang.Object)IvyPublication.artifact(java.lang.Object, org.gradle.api.Action) 方法。您还可以使用 IvyPublication.setArtifacts(java.lang.Iterable) 完全替换已发布的 artifact 集合。这些方法共同为您提供了对要发布的 artifact 的完全控制。

此外,IvyModuleDescriptorSpec 提供了配置方法,可用于自定义将在 Ivy 模块描述符中发布的许可证、作者和描述。

对于 publication 的任何其他调整,可以在发布之前修改生成的 Ivy 描述符文件。这是通过使用 IvyModuleDescriptorSpec.withXml(org.gradle.api.Action) 方法完成的,通常通过传递给 IvyPublication.descriptor(org.gradle.api.Action) 方法的 Closure 来完成。

// Example of publishing a java component with an added source jar and custom module description
plugins {
    id 'java'
    id 'ivy-publish'
}

task sourceJar(type: Jar) {
  from sourceSets.main.allJava
}

publishing {
  publications {
    myPublication(IvyPublication) {
      from components.java
      artifact(sourceJar) {
        type = "source"
        extension = "src.jar"
        conf = "runtime"
      }
      descriptor {
        license {
          name = "Custom License"
        }
        author {
          name = "Custom Name"
        }
        description {
          text = "Custom Description"
        }
      }
    }
  }
}

属性

属性描述
artifacts

此 publication 的完整 artifact 集合。

配置

此 publication 的完整配置集合。

descriptor

将要发布的模块描述符。

module

此 publication 的模块。

organisation

此 publication 的组织。

revision

此 publication 的修订版本。

方法

方法描述
artifact(source)

创建一个自定义的 IvyArtifact 以包含在 publication 中。artifact 方法可以接受各种输入:

artifact(source, config)

创建一个 IvyArtifact 以包含在 publication 中,该 artifact 由相关操作配置。第一个参数用于创建自定义 artifact 并将其添加到 publication,如 IvyPublication.artifact(java.lang.Object) 所示。然后使用提供的操作配置创建的 IvyArtifact。此方法还接受配置操作作为闭包参数,通过类型强制转换。

configurations(config)

定义应包含在发布的 ivy 模块描述符文件中的一些 IvyConfiguration。以下示例演示如何添加一个“testCompile”配置,以及一个扩展它的“testRuntime”配置。

descriptor(configure)

配置将要发布的描述符。

from(component)

提供应发布的软件组件。

suppressAllIvyMetadataWarnings()

禁止所有 Ivy publication 的兼容性警告。当使用无法完全映射到 Ivy xml 的 Gradle 功能时,会发出警告。

suppressIvyMetadataWarningsFor(variantName)

禁止 Ivy publication 对指定 variant 的兼容性警告。当使用无法完全映射到 Ivy xml 的 Gradle 功能时,会发出警告。

脚本块

无脚本块

属性详情

IvyArtifactSet artifacts

此 publication 的完整 artifact 集合。

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

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

task sourceJar(type: Jar) {
  archiveClassifier = "source"
}

publishing {
  publications {
    ivy(IvyPublication) {
      from components.java
      artifacts = ["my-custom-jar.jar", sourceJar]
    }
  }
}

IvyConfigurationContainer configurations (只读)

此 publication 的完整配置集合。

IvyModuleDescriptorSpec descriptor (只读)

将要发布的模块描述符。

String module

此 publication 的模块。

String organisation

此 publication 的组织。

String revision

此 publication 的修订版本。

方法详情

IvyArtifact artifact(Object source)

创建一个自定义的 IvyArtifact 以包含在 publication 中。artifact 方法可以接受各种输入:

  • 一个 PublishArtifact 实例。名称、类型、扩展和分类器值取自提供的实例。
  • 一个 AbstractArchiveTask 实例。名称、类型、扩展和分类器值取自提供的实例。
  • 任何可以通过 Project.file(java.lang.Object) 方法解析为 File 的内容。名称、扩展和分类器值从文件名中推断。
  • 一个 Map,其中包含一个“source”条目,该条目可以解析为任何其他输入类型,包括文件。此 Map 可以包含额外的属性以进一步配置构建的 artifact。

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

plugins {
    id 'ivy-publish'
}

task sourceJar(type: Jar) {
  archiveClassifier = "source"
}

task genDocs {
  doLast {
    // Generate 'my-docs-file.htm'
  }
}

publishing {
  publications {
    ivy(IvyPublication) {
      artifact sourceJar // Publish the output of the sourceJar task
      artifact 'my-file-name.jar' // Publish a file created outside of the build
      artifact source: 'my-docs-file.htm', classifier: 'docs', extension: 'html', builtBy: genDocs // Publish a file generated by the 'genDocs' task
    }
  }
}

IvyArtifact artifact(Object source, Action<? super IvyArtifact> config)

创建一个 IvyArtifact 以包含在 publication 中,该 artifact 由相关操作配置。第一个参数用于创建自定义 artifact 并将其添加到 publication,如 IvyPublication.artifact(java.lang.Object) 所示。然后使用提供的操作配置创建的 IvyArtifact。此方法还接受配置操作作为闭包参数,通过类型强制转换。

plugins {
    id 'ivy-publish'
}

task sourceJar(type: Jar) {
  archiveClassifier = "source"
}

task genDocs {
  doLast {
    // Generate 'my-docs-file.htm'
  }
}

publishing {
  publications {
    ivy(IvyPublication) {
      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"
        conf = "runtime->default"
      }
      artifact("my-docs-file.htm") {
        type = "documentation"
        extension = "html"
        builtBy genDocs
      }
    }
  }
}

void configurations(Action<? super IvyConfigurationContainer> config)

定义应包含在发布的 ivy 模块描述符文件中的一些 IvyConfiguration。以下示例演示如何添加一个“testCompile”配置,以及一个扩展它的“testRuntime”配置。

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

publishing {
  publications {
    ivy(IvyPublication) {
      configurations {
          testCompile {}
          testRuntime {
              extend "testCompile"
          }
      }
    }
  }
}

void descriptor(Action<? super IvyModuleDescriptorSpec> configure)

配置将要发布的描述符。

可以通过使用 IvyModuleDescriptorSpec.withXml(org.gradle.api.Action) 方法修改描述符 XML。

void from(SoftwareComponent component)

提供应发布的软件组件。

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

目前支持两种组件类型:“components.java”(由 JavaPlugin 添加)和“components.web”(由 WarPlugin 添加)。对于任何单独的 IvyPublication,只能以这种方式提供一个组件。以下示例演示如何将“java”组件发布到 ivy 仓库。

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

publishing {
  publications {
    ivy(IvyPublication) {
      from components.java
    }
  }
}

void suppressAllIvyMetadataWarnings()

禁止所有 Ivy publication 的兼容性警告。当使用无法完全映射到 Ivy xml 的 Gradle 功能时,会发出警告。

void suppressIvyMetadataWarningsFor(String variantName)

禁止 Ivy publication 对指定 variant 的兼容性警告。当使用无法完全映射到 Ivy xml 的 Gradle 功能时,会发出警告。