如何编写Gradle脚本以便将shadowjar发布到Artifactory中

2022-09-04 06:18:43

我在我的java项目中使用shadowJar。我想把结果推到伪像中。

我的 gradle 脚本看起来像这样,我不知道如何连接这些点:

shadowJar {
    baseName = 'com.mycompany.myapp'
    manifest {
        attributes 'Main-Class': 'myapp.starter'
    }
}


  ]
    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'maven'
    apply plugin: 'com.github.johnrengelman.shadow'


    // rep for the project
    repositories {
        mavenCentral()
        maven {
            url 'http://repo.company:8081/artifactory/libs-release'
            credentials {
                username = "${repo_user}"
                password = "${repo_password}"
            }
        }
        maven {
            url 'http://repo.company:8081/artifactory/libs-snapshot'
            credentials {
                username = "${repo_user}"
                password = "${repo_password}"
            }
        }

}


publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            artifact sourceJar {
                classifier "sources"
            }
        }
    }
}

如何编写 gradle 代码来获取 shadowjar 文件?

谢谢,雷。


答案 1

这有点晚了,但我想告诉你我是如何让它工作的。也许它可以帮助像我一样偶然发现这个问题的人:

build.gradle.kts:

plugins {
    java
    `maven-publish`
    id("com.github.johnrengelman.shadow") version "5.1.0"
}
publishing {
    publications {
        create<MavenPublication>("maven") {
            from(components["java"])
            artifact(tasks["shadowJar"])
        }
    }
    repositories {
        maven {
          /* ... */
        }
    }
}

上面的例子是用Kotlin编写的,如果你更喜欢Groovy,你需要写这个:

build.gradle:

publishing {
  publications {
    shadow(MavenPublication) {
      from components.java
      artifact shadowJar
    }
  }
}

(在这里找到它:https://libraries.io/github/johnrengelman/shadow)


答案 2

该部分确定您使用插件发布的内容。publicationmaven-publish

在你当前的配置中,将发布项目的默认 jar 工件,而工件发布 sourceJar。为了发布不同的 jar,您需要修改(或添加新的)发布。from components.javasourceJar

shadowJar {
  baseName = 'myproject-shadow'
  classifier = ''
}

publishing {
  publications {
    shadow(MavenPublication) {
      from components.shadow
      artifactId = 'myproject-shadow'
    }
  }
}

jar 名称中使用的版本来自 project.version。


推荐