如何用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
相关产品推荐
相关产品推荐

