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))。發布的組件會用於判斷要發布哪些 Artifact,以及應在產生的 POM 檔案中列出哪些相依性。

若要將其他 Artifact 新增至發布的集合,請使用 MavenPublication.artifact(java.lang.Object)MavenPublication.artifact(java.lang.Object, org.gradle.api.Action) 方法。您也可以使用 MavenPublication.setArtifacts(java.lang.Iterable) 完全取代發布的 Artifact 集合。這些方法共同為您提供對將發布哪些 Artifact 的完整控制權。

若要自訂在產生的 POM 中發布的 Metadata,請在透過 MavenPublication.getPom() 方法傳回的 POM 上設定屬性 (例如 MavenPom.getDescription()),或直接透過傳遞至 MavenPublication.pom(org.gradle.api.Action) 的 Action (或 Closure)。作為最後手段,可以使用 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 = "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

此發布的完整 Artifact 集合。

groupId

此發布的 groupId。

pom

將發布的 POM。

version

此發布的版本。

方法

方法說明
artifact(source)

建立要包含在發布中的自訂 MavenArtifactartifact 方法可以接受各種輸入

artifact(source, config)

建立要包含在發布中的 MavenArtifact,並透過相關聯的 Action 進行配置。第一個參數用於建立自訂 Artifact 並將其新增至發布,如同 MavenPublication.artifact(java.lang.Object)。然後使用提供的 Action 配置建立的 MavenArtifact,可以覆寫 Artifact 的副檔名或分類器。此方法也接受配置 Action 作為 Closure 引數,透過類型強制轉換。

from(component)

提供應發布的軟體組件。

pom(configure)

配置將發布的 POM。提供的 Action 將針對 MavenPublication.getPom() 結果執行。此方法也接受 Closure 引數,透過類型強制轉換。

setArtifacts(sources)

清除先前從 MavenPublication.getArtifacts() 新增的任何 Artifact,並從指定的來源建立 Artifact。每個提供的來源都依照 MavenPublication.artifact(java.lang.Object) 進行解譯。例如,若要排除組件宣告的相依性,並改為使用自訂 Artifact 集合

suppressAllPomMetadataWarnings()

靜音 Maven 發布的所有相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。

suppressPomMetadataWarningsFor(variantName)

針對指定變體的 Maven 發布,靜音相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。

versionMapping(configureAction)

配置版本對應策略。例如,若要將已解析版本用於執行階段相依性

腳本區塊

沒有腳本區塊

屬性詳細資訊

String artifactId

此發布的 artifactId。

此發布的完整 Artifact 集合。

String groupId

此發布的 groupId。

MavenPom pom (唯讀)

將發布的 POM。

String version

此發布的版本。

方法詳細資訊

MavenArtifact artifact(Object source)

建立要包含在發布中的自訂 MavenArtifactartifact 方法可以接受各種輸入

  • 一個 PublishArtifact 實例。副檔名和分類器值取自包裝的實例。
  • 一個 AbstractArchiveTask 實例。副檔名和分類器值取自包裝的實例。
  • 任何可以透過 Project.file(java.lang.Object) 方法解析為 File 的項目。副檔名和分類器值從檔案名稱內插。
  • 一個 Map,其中包含可以解析為任何其他輸入類型 (包括檔案) 的 'source' 項目。此 Map 可以包含 'classifier' 和 'extension' 項目,以進一步配置建構的 Artifact。

以下範例示範新增各種自訂 Artifact。

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 進行配置。第一個參數用於建立自訂 Artifact 並將其新增至發布,如同 MavenPublication.artifact(java.lang.Object)。然後使用提供的 Action 配置建立的 MavenArtifact,可以覆寫 Artifact 的副檔名或分類器。此方法也接受配置 Action 作為 Closure 引數,透過類型強制轉換。

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)

提供應發布的軟體組件。

  • 組件宣告的任何 Artifact 都將包含在發布中。
  • 組件宣告的相依性將包含在發布的 Metadata 中。

目前支援 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() 結果執行。此方法也接受 Closure 引數,透過類型強制轉換。

void setArtifacts(Iterable<?> sources)

清除先前從 MavenPublication.getArtifacts() 新增的任何 Artifact,並從指定的來源建立 Artifact。每個提供的來源都依照 MavenPublication.artifact(java.lang.Object) 進行解譯。例如,若要排除組件宣告的相依性,並改為使用自訂 Artifact 集合

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 發布的所有相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。

void suppressPomMetadataWarningsFor(String variantName)

針對指定變體的 Maven 發布,靜音相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。

void versionMapping(Action<? super VersionMappingStrategy> configureAction)

配置版本對應策略。例如,若要將已解析版本用於執行階段相依性

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

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