Подтвердить что ты не робот

Почему моя задача Gradle всегда запущена?

Если я запустил ./gradlew clean или ./gradlew tasks --all, он всегда запускает мою задачу компиляции (которую я перезаписал в gradle build script, как показано ниже)

task eclipse(overwrite: true) {
    exec { commandLine = ["./play1.3.x/play", "eclipsify"] }
}

task compileJava(overwrite: true) {
    exec { commandLine = ["./play1.3.x/play", "precompile"] }
}

task deleteDirs(type: Delete) {
    delete 'precompiled', 'tmp'
}

//NOW, assemble needs to zip up directories precompiled, public, lib, and conf
clean.dependsOn('deleteDirs')

Я не понимаю, почему eclipse один не работает каждый раз и, кажется, работает нормально, а переопределение компиляции не работает.

4b9b3361

Ответ 1

Очень важно понять различие между конфигурацией задачи и выполнением задачи:

task eclipsify {
    // Code that goes here is *configuring* the task, and will 
    // get evaluated on *every* build invocation, no matter
    // which tasks Gradle eventually decides to execute.
    // Don't do anything time-consuming here.
    doLast {
        // `doLast` adds a so-called *task action* to the task.
        // The code inside the task action(s) defines the task behavior.
        // It will only get evaluated if and when Gradle decides to 
        // execute the task.
        exec { commandLine = ["./play1.3.x/play", "eclipsify"] }
    }
}

// Improving on the previous task declaration, let now use a *task type* 
// (see `type: Exec` below). Task types come with a predefined task action, 
// so it typically not necessary to add one yourself. Also, many task types 
// predefine task inputs and outputs, which allows Gradle to check if the task 
// is up-to-date. Another advantage of task types is that they allow for 
// better tooling support (e.g. auto-completion of task properties).
task precompile(type: Exec) {
    // Since this task already has a task action, we only
    // need to configure it.
    commandLine = ["./play1.3.x/play", "precompile"] }
}

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

Чтобы узнать, какие типы задач доступны и как их настроить, ознакомьтесь с Gradle ссылкой на язык сборки. Кроме того, постоянно растет список сторонних плагинов и типов задач.

PS: Я изменил имена задач и удалил overwrite: True (который должен использоваться только в качестве последнего средства), чтобы не отвлекаться от основного сообщения моего ответа.

Ответ 2

Gradle не знает, что ваш источник не был изменен. Для любого неизвестного состояния он отмечает задачу как несовременную. Поскольку ваша задача состоит в замене compile на 100%, вы несете ответственность за предоставление статуса задачи.

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

Запустите проект с --info, чтобы узнать, почему Gradle помещает compile задачу как актуальную.

Надеюсь, что это поможет.