Уже существует метод получения, называемый getTimeout()
, который происходит от расширения DefaultTask
, и он имеет другой тип (Provider<Duration>
), чем тот, который вы используете (целое число, которое я предполагаю). Вот почему Groovy сообщает об ошибке. Решение зависит от того, что вы пытаетесь сделать.
def timeout
в Groovy объявляет новую переменную и, поскольку она опубликована c, она предоставит вам методы получения и установки. Поскольку тип отличается от унаследованного, вы в основном пытаетесь переопределить тот же метод получения, но с другим типом возврата. Это не разрешено В любом случае вы не должны скрывать или игнорировать эти вещи. Поэтому вам нужно будет найти другое имя для вашей собственной переменной, если вам нравится это делать. В этом случае вы, вероятно, также захотите использовать API провайдера, поскольку он более гибкий.
Пример:
class CustomtoolProgram extends DefaultTask {
@Internal
final Property<Integer> myTimeout = project.objects.property(Integer).convention(300)
}
В приведенном выше фрагменте кода @Internal
означает, что свойство не должны приниматься во внимание при проведении текущей проверки. Это также final
, поскольку свойства не должны быть переназначены.
Если вместо этого вы хотите установить указанное время ожидания задачи, вам придется сделать это по-другому. Прежде всего, свойство timeout
является Провайдером, поэтому вы не можете присваивать ему значения непосредственно за пределами Groovy DSL. Во-вторых, он принимает Duration, а не целое число, и, наконец, его следует устанавливать в конструкторе, а не в качестве новой переменной.
Пример:
class CustomtoolProgram extends DefaultTask {
CustomtoolProgram() {
timeout.set(Duration.ofMillis(300))
}
}
Однако, если вы хотите Определите задачу, которая запускает внешнюю программу, вы должны рассмотреть возможность использования задачи Exe c.
Надеюсь, это было полезно.