Предупреждения об устаревании

У меня есть этот код:

task fatJar(type: Jar) << {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class': 'mvc.MvcMain'
    }
    baseName = project.name + '-all'
    with jar
}

Я получил это предупреждение:

Настройка дочерних спецификаций задачи копирования во время выполнения задачи устарела и планируется удалить в Gradle 4.0. Рассмотрите возможность настройки спецификации во время настройки или используйте отдельную задачу для выполнения настройки. at build_b2xrs1xny0xxt8527sk0dvm2y $ _run_closure4.doCall

и это предупреждение:

Метод Task.leftShift(Closure) устарел и должен быть удален в Gradle 5.0. Пожалуйста, используйте Task.doLast(Action) вместо этого.

Как переписать мою задачу?

Ответ 1

удаляют < и заверните его с помощью doLast {...}

// Since Gradle 3.2 the << (leftShift) operator
// is deprecated. The operator can confuse
// people, because without the operator
// we would configure the deprecatedSample task,
// instead of adding the action statement:
// println 'Sample task'.
task deprecatedSample << {
    println 'Sample task'
}

// To have no confusion we should use
// the doLast method of a task to add
// the action statement:
// println 'Sample task'.
task newSample {
    doLast {
        println 'Sample task'
    }
}

Ответ 2

это может выглядеть примерно так; это должно по крайней мере исправить одно из предупреждений:

task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                   'Implementation-Version': version,
                   'Main-Class': 'mvc.MvcMain'
    }
    baseName = project.name + '-all'
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        } 
    }
    with jar
}

Ответ 3

Линия, которая по сути вызывает оба предупреждения

task fatJar(type: Jar) << {

В версии Gradle вы используете (который предположительно некоторые 3.x версии, leftShift оператор Groovy называет doLast метод. Все, что передается << (leftShift) выполняется в doLast действии задачи этой задачи.

Чтобы исправить leftShift

Метод Task.leftShift(Closure) устарел и должен быть удален в Gradle 5.0. Пожалуйста, используйте Task.doLast(Action) вместо этого.

Вы хотели бы изменить свою задачу на:

task fatJar(type: Jar) {
  doLast {
    manifest {
      attributes 'Implementation-Title': 'Gradle Jar File Example',
                 'Implementation-Version': version,
                 'Main-Class': 'mvc.MvcMain'
    }
    baseName = project.name + '-all'
    with jar
  }
}

Теперь, однако, вы все равно увидите другое предупреждение:

Настройка дочерних спецификаций задачи копирования во время выполнения задачи устарела и планируется удалить в Gradle 4.0. Рассмотрите возможность настройки спецификации во время настройки или используйте отдельную задачу для выполнения настройки.

Это предупреждение говорит вам, что вы fatJar конфигурацию своей задачи fatJar во время выполнения, что является плохой вещью. Это портит актуальную проверку и инкрементные сборки.

Способ исправить это предупреждение состоит в том, чтобы следовать одному из предложений из предыдущего вывода CLI. Например, здесь "настройка спецификации во время настройки".

task fatJar(type: Jar) {
  manifest {
    attributes 'Implementation-Title': 'Gradle Jar File Example',
               'Implementation-Version': version,
               'Main-Class': 'mvc.MvcMain'
  }
  baseName = project.name + '-all'
  with jar
}

Обратите внимание, что больше нет блока doLast так как мы не добавляем никаких других действий.