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

如何用Gradle脚本上传多Jar至Maven/Artifactory并配置自定义依赖POM

多Jar批量上传Artifactory并配置专属依赖POM的Gradle解决方案

问题背景

现有独立于项目的Gradle脚本可批量上传Jar至Artifactory,但生成的标准POM无依赖信息。已实现单个Jar带自定义依赖POM的上传,也能批量上传Jar,但批量上传时所有Jar的POM会包含全部依赖,无法实现依赖按需过滤。需求是在同一脚本中为不同Jar配置对应专属依赖的自定义POM,用于Linux终端或Jenkins执行上传。

解决方案

核心思路是为每个Jar创建专属的Gradle依赖配置,将对应依赖分配到专属配置中,再在发布任务中仅读取对应配置的依赖生成POM,实现依赖的按需隔离。

完整脚本示例

apply plugin: 'maven-publish'
apply plugin: 'java'

// 1. 为每个Jar定义专属的依赖配置
configurations {
    jar1Deps
    jar2Deps
}

// 2. 为不同Jar分配专属依赖
dependencies {
    // jar1专属依赖
    jar1Deps "org.apache.kafka:kafka-clients:3.3.1-test3"
    jar1Deps "org.slf4j:slf4j-api:1.7.36"
    
    // jar2专属依赖
    jar2Deps "com.fasterxml.jackson.core:jackson-annotations:2.13.3"
    jar2Deps "com.fasterxml.jackson.core:jackson-databind:2.13.3"
}

publishing {
    repositories {
        maven {
            url "<Artifactory url>"
            credentials {
                username = '<username>'
                password = '<pwd>'
            }
        }
    }

    publications {
        jar1(MavenPublication) {
            groupId 'my.group.id'
            artifactId 'localJar1'
            version '1.0.0'
            artifact ("localJar1.jar")
            
            // 3. 仅引入jar1专属配置的依赖到POM
            pom.withXml {
                def dependenciesNode = asNode().appendNode("dependencies")
                configurations.jar1Deps.allDependencies.each { dep ->
                    def depNode = dependenciesNode.appendNode("dependency")
                    depNode.appendNode("groupId", dep.group)
                    depNode.appendNode("artifactId", dep.name)
                    depNode.appendNode("version", dep.version)
                    depNode.appendNode("scope", "compile")
                }
            }
        }
        
        jar2(MavenPublication) {
            groupId 'my.group.id'
            artifactId 'localJar2'
            version '1.0.0'
            artifact ("localJar2.jar")
            
            // 3. 仅引入jar2专属配置的依赖到POM
            pom.withXml {
                def dependenciesNode = asNode().appendNode("dependencies")
                configurations.jar2Deps.allDependencies.each { dep ->
                    def depNode = dependenciesNode.appendNode("dependency")
                    depNode.appendNode("groupId", dep.group)
                    depNode.appendNode("artifactId", dep.name)
                    depNode.appendNode("version", dep.version)
                    depNode.appendNode("scope", "compile")
                }
            }
        }
    }
}

关键说明

  • 专属配置定义:通过configurations { jar1Deps; jar2Deps }为每个Jar创建独立的依赖容器,避免依赖混同
  • 依赖精准分配:将不同Jar的依赖分别挂载到对应的专属配置下,确保依赖归属清晰
  • POM按需生成:在每个发布任务的pom.withXml块中,仅遍历当前Jar对应的专属配置依赖,生成只包含自身所需依赖的POM文件

内容的提问来源于stack exchange,提问作者Hrithik Roshan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:35:50