【问题标题】:How to change name of jar created using shadowjar如何更改使用 shadowjar 创建的 jar 的名称
【发布时间】:2016-02-05 05:28:49
【问题描述】:

我正在使用 shadowJar 插件来构建/创建我的 fatJar 。在我的 build.gradle 我有这个

shadowJar{
mergeServiceFiles('META-INF/spring.*')
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
exclude "META-INF/LICENSE"
}

使用 gradle shadowJar 创建我的 fat jar 。然而,创建的胖 jar 的名称是 sample-SNAPSHOT-ns.r100-all.jar 。我想将其更改为 sample-SNAPSHOT-ns.r100-deploy.jar 。你如何使用 ShadowJar 覆盖 jar 名称。

【问题讨论】:

    标签: gradle jar build


    【解决方案1】:

    ShadowJar 插件提供了一个 Jar 任务扩展。使用archiveFileName属性进行配置,如:

    shadowJar{
        mergeServiceFiles('META-INF/spring.*')
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
        exclude "META-INF/LICENSE"
        archiveFileName = "sample-${classifier}-ns.r100-deploy.${extension}"
    }
    

    您可以使用${baseName}${appendix}${version}${classifier}${extension} 等占位符。

    请注意,archiveName 现在是 archiveFileName,从 ShadowJar 版本 4 开始。

    【讨论】:

    • Shadow 插件默认为archiveName = "${baseName}-${version}-${classifier}.${extension}"
    • @mernst 我的 build.gradle 文件中的该命令引发错误 Could not get unknown property 'baseName' for root project
    【解决方案2】:

    对于希望如何使用 Kotlin DSL 做到这一点的人来说:

    tasks.withType<ShadowJar> {
       archiveFileName.set("${archiveBaseName}-${archiveVersion}-${archiveClassifier}.${archiveExtension}")
    }
    

    【讨论】:

      【解决方案3】:

      结合@richard 和@christian-dräger 的答案

      tasks.withType<ShadowJar> {
          archiveFileName.set("${project.name}-${project.version}.jar")
      }
      

      这输出格式myProject-0.0.1.jar

      【讨论】:

        【解决方案4】:

        您似乎只想将-all 替换为-deploy,只需将分类器选项添加到shadowjar:

        shadowJar{
          mergeServiceFiles('META-INF/spring.*')
          exclude "META-INF/*.SF"
          exclude "META-INF/*.DSA"
          exclude "META-INF/*.RSA"
          exclude "META-INF/LICENSE"
          archiveName = "sample-${classifier}-ns.r100-deploy.${extension}"
          classifier = 'deploy'
        }
        

        【讨论】:

          【解决方案5】:

          除了 Richards 的回答之外,我还喜欢通过使用 kotlin DSL 来配置任务:

          tasks {
              val shadowJar by getting(ShadowJar::class) {
                  archiveFileName.set("${project.name}-${project.version}-foo.jar")
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2021-05-21
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            • 2020-03-09
            • 2017-12-08
            • 2016-12-24
            • 2023-03-24
            • 1970-01-01
            相关资源
            最近更新 更多