Возвращаемый тип java .lang.Object getTimeout () несовместим с org.gradle.api.provider.Property в org.gradle.api.internal.AbstractTask. - PullRequest
0 голосов
/ 27 января 2020

У меня возникла проблема при создании приложения с использованием Gradle. Пожалуйста, ознакомьтесь с приведенным ниже сообщением об ошибке.

Groovy: тип возврата java .lang.Object getTimeout () в com.test.gradle.MemtoolProgram несовместим с org.gradle.api.provider.Property в org.gradle.api.internal.AbstractTask **

Пример кода:

public class CustomtoolProgram extends DefaultTask {

def timeout=300;

}

Кто-нибудь из вас может помочь решить эту проблему?

1 Ответ

0 голосов
/ 27 января 2020

Уже существует метод получения, называемый 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.

Надеюсь, это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...