API 文件 | 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) | 建立要包含在發布中的自訂 |
artifact(source, config) | 建立要包含在發布中的 |
from(component) | 提供應發布的軟體組件。 |
pom(configure) | 配置將發布的 POM。提供的 Action 將針對 |
setArtifacts(sources) | 清除先前從 |
suppressAllPomMetadataWarnings() | 靜音 Maven 發布的所有相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。 |
suppressPomMetadataWarningsFor(variantName) | 針對指定變體的 Maven 發布,靜音相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。 |
versionMapping(configureAction) | 配置版本對應策略。例如,若要將已解析版本用於執行階段相依性 |
String
artifactId
此發布的 artifactId。
MavenArtifactSet
artifacts
此發布的完整 Artifact 集合。
String
groupId
此發布的 groupId。
MavenPom
pom
(唯讀)
將發布的 POM。
String
version
此發布的版本。
MavenArtifact
artifact
(Object
source)
建立要包含在發布中的自訂 MavenArtifact
。artifact
方法可以接受各種輸入
- 一個
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)
Action
<? super MavenArtifact
>建立要包含在發布中的 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 } } }
配置將發布的 POM。提供的 Action 將針對 MavenPublication.getPom()
結果執行。此方法也接受 Closure 引數,透過類型強制轉換。
void
setArtifacts
(Iterable
<?>
sources)
Iterable
<?>清除先前從 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
suppressPomMetadataWarningsFor
(String
variantName)
針對指定變體的 Maven 發布,靜音相容性警告。當使用 Gradle 功能但無法完整對應到 Maven POM 時,會發出警告。
void
versionMapping
(Action
<? super VersionMappingStrategy
>
configureAction)
Action
<? super VersionMappingStrategy
>配置版本對應策略。例如,若要將已解析版本用於執行階段相依性
plugins { id 'java' id 'maven-publish' } publishing { publications { maven(MavenPublication) { from components.java versionMapping { usage('java-runtime'){ fromResolutionResult() } } } } }