You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle中实现特定构件的单独发布?(从uploadArchives迁移至Ivy发布场景)

Got it, let's work through this migration step by step. Moving from the old uploadArchives approach to Gradle's Ivy Publish plugin is straightforward, and we can absolutely set up those dedicated publishArchive1 and publishArchive2 tasks you need.

First, let's start by applying the Ivy Publish plugin and configuring your repository (adjust the repo details to match your existing setup):

plugins {
    // Apply the Ivy Publish plugin
    id 'ivy-publish'
}

publishing {
    repositories {
        ivy {
            // Replace with your actual repository URL
            url = uri("https://your-ivy-repository-url")
            
            // Add credentials if your repo requires authentication
            credentials {
                username = project.findProperty('repoUsername') ?: System.getenv('REPO_USERNAME')
                password = project.findProperty('repoPassword') ?: System.getenv('REPO_PASSWORD')
            }
        }
    }
}

Next, we'll replicate your conditional artifact logic but map each archive to its own Ivy publication, then create simplified tasks for each publish action. This lets you run ./gradlew publishArchive1 or ./gradlew publishArchive2 directly:

// Handle Archive1 publication (only if your original condition is met)
if (someCondition) {
    // Create a dedicated publication for Archive1
    publishing.publications.create('archive1', IvyPublication) {
        // If archive1 is a custom artifact (not the default component), use this:
        artifact archive1
        
        // Optional: Configure Ivy descriptor details (match your old uploadArchives config if needed)
        organisation = 'com.yourcompany'
        module = 'your-project-module'
        revision = project.version
        
        // Add extra descriptor metadata if required (e.g., licenses, descriptions)
        descriptor {
            license {
                name = 'MIT'
                url = 'https://opensource.org/licenses/MIT'
            }
        }
    }

    // Register the simplified publishArchive1 task
    tasks.register('publishArchive1') {
        dependsOn tasks.named("publishArchive1PublicationToIvyRepository")
        description = "Publishes Archive1 to the configured Ivy repository"
    }
}

// Handle Archive2 publication (mirror the Archive1 setup)
if (someOtherCondition) {
    publishing.publications.create('archive2', IvyPublication) {
        artifact archive2
        
        // Reuse or adjust descriptor details as needed
        organisation = 'com.yourcompany'
        module = 'your-project-module'
        revision = project.version
    }

    tasks.register('publishArchive2') {
        dependsOn tasks.named("publishArchive2PublicationToIvyRepository")
        description = "Publishes Archive2 to the configured Ivy repository"
    }
}

Key Notes:

  • If your archives are part of the project's default component (e.g., a standard Java jar), replace artifact archive1 with from components.java (or the relevant component for your project type, like components.web for a Spring Boot app).
  • The conditional checks (if (someCondition)) match your original artifacts block logic, so publications and tasks will only exist when the conditions are met—just like your old setup.
  • Gradle auto-generates Ivy publication tasks with the pattern publish<PublicationName>PublicationToIvyRepository; our custom publishArchive1/publishArchive2 tasks act as simple aliases to make execution easier.

Once this is set up, you can run the tasks exactly as you wanted:

./gradlew publishArchive1
# OR
./gradlew publishArchive2

内容的提问来源于stack exchange,提问作者Paul Gibson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:27:31