将shadow插件生成的阴影jar重命名为原始工件名称

时间:2018-01-05 01:17:36

标签: java gradle shadow

我正在使用gradle shadow插件来构建我的超级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文件夹中生成以下jar。

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

我想用超级罐替换原来的jar。我该怎么做?

4 个答案:

答案 0 :(得分:6)

目前尚不清楚为什么要这样做,但我假设你的意思是“用原来的JAR的名字”。你应该做两件事:

  1. jar任务(或archiveName或其他影响名称的属性)提供不同的分类,或者禁用它,以便您不会在每次构建时不断覆盖它并避免执行不必要的工作
  2. 更改shadowJar任务
  3. 上的分类器

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

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

答案 1 :(得分:5)

也许在build.gradle中禁用jar任务可以正常工作

apply plugin: 'java'
jar.enabled = false

所以你只有你的超级罐。

答案 2 :(得分:5)

至少击键,不烧任何桥梁,

替换行:

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 :(得分:3)

你可以这样做:

// 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)

经过测试和工作,希望它对你有帮助!