Переименовать теневую банку, созданную плагином тени, в оригинальное имя артефакта

Я использую плагин 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.

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

Я хочу заменить оригинальную банку на банку Uber. Как мне это сделать?

4 ответа

Непонятно, почему вы хотите это сделать, но я предполагаю, что вы имеете в виду "с оригинальным именем JAR". Вы должны сделать 2 вещи:

  1. Дайте другой классификатор jar задание (или archiveName или другие свойства, которые влияют на имя) или отключите его, чтобы вы не перезаписывали его при каждой сборке и не выполняли ненужную работу
  2. Изменить классификатор на shadowJar задача

ShadowJar простирается от встроенного Gradle Jar задача, поэтому большинство параметров конфигурации из этого относятся к ShadowJar задача.

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

tasks.shadowJar.configure {
  classifier = null
}

Для наименьшего количества нажатий клавиш, не сжигая мосты,

заменить строку:

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

Возможно отключение задачи jar в build.gradle буду работать

apply plugin: 'java'
jar.enabled = false

Таким образом, вы будете иметь только свой Uber Jar.

Вы можете сделать это следующим образом:

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

Это было проверено и сработало, надеюсь, это помогло вам!

Другие вопросы по тегам