【问题标题】:Rename shadow jar produced by shadow plugin to original artifact name将shadow插件生成的shadow jar重命名为原始工件名称
【发布时间】:2023-04-10 10:00:01
【问题描述】:

我正在使用 gradle shadow 插件来构建我的 uber jar。

build.grade 文件看起来像:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
    }
}

apply plugin: 'com.github.johnrengelman.shadow'


dependencies {
   compile "com.amazonaws:aws-lambda-java-events:1.3.0"

}

assemble.dependsOn(shadowJar)

它在 build/libs 文件夹中生成以下 jars。

myProject-1.0.0-SNAPSHOT.jar
myProject-1.0.0-SNAPSHOT-all.jar '//uber jar

我想用 uber jar 替换原来的 jar。我该怎么做?

【问题讨论】:

    标签: java gradle shadow


    【解决方案1】:

    不清楚为什么要这样做,但我假设您的意思是“使用原始 JAR 的名称”。你应该做两件事:

    1. jar 任务(或archiveName,或影响名称的其他属性)提供不同的分类器或禁用它,这样您就不会在每次构建时不断覆盖它并避免做不必要的工作李>
    2. 更改shadowJar 任务的分类器

    ShadowJar 扩展自 Gradle 内置的 Jar 任务,因此其中的大部分配置选项都适用于 ShadowJar 任务。

    tasks.jar.configure {
      classifier = 'default'
    }
    
    tasks.shadowJar.configure {
      classifier = null
    }
    

    【讨论】:

      【解决方案2】:

      以最少的击键次数,不烧任何桥梁,

      换行:

      assemble.dependsOn(shadowJar)
      

      与:

      jar {
          enabled = false
          dependsOn(shadowJar { classifier = null })
      }
      

      验证:

      $ gradle assemble --console=plain
      :compileJava
      :processResources NO-SOURCE
      :classes
      :shadowJar
      :jar SKIPPED
      :assemble UP-TO-DATE
      

      【讨论】:

        【解决方案3】:

        也许禁用build.gradle 中的 jar 任务会起作用

        apply plugin: 'java'
        jar.enabled = false
        

        所以你只会有你的超级罐子。

        【讨论】:

          【解决方案4】:

          你可以这样做:

          // save the old jar task
          def oldJarTask = tasks.jar
          
          // remove the original jar tasks from the tasks list
          tasks.remove(jar)
          
          // create a new task named "jar" thats depends on shadowJar
          // when you will run jar task it will be actually run the shadow jar
          task jar(dependsOn:[shadowJar])
          
          // create a task to run the plain old good jar task from gradle :)
          task oldJar(dependsOn: oldJarTask)
          

          这个已经测试过了,希望对你有帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-08-04
            • 2014-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-26
            相关资源
            最近更新 更多