Проблема вызова подписи fileTree (Object, Closure) - PullRequest
1 голос
/ 21 февраля 2012

У меня есть метод, который принимает строку и закрытие, которое я включаю в мое соглашение о плагине:

def someMethod( String obj, Closure closure) {
    println('HERE I AM')
    confFileTree = project.fileTree( obj, closure )
}

Из теста Junit я называю это так:

project.convention.plugins.license.licenseFiles( 'src') {
    include "main/java/**"
    include "main/resources/*.properties"
    exclude "**/Licensed.java"
}

Я знаю, что метод вызван, потому что напечатано «ЗДЕСЬ Я ЕСМЬ». Но тогда я получаю сообщение об ошибке:

org.gradle.api.internal.MissingMethodException: 
    Could not find method fileTree() for arguments 
    [src, nl.javadude.gradle.plugins.license.tasks.LicenseTaskTest$_shouldScanFilesForLicenseWithExclude_closure1@3cbdb6ae] 
    on root project 'test'.

Я должен заявить, что этот код первоначально назывался формой Closure для fileTree, с "from 'src'" в замыкании, что прекрасно работает, но этап Gradle 8 говорит мне, что это устаревший метод.

1 Ответ

1 голос
/ 21 февраля 2012

Вы уверены, что тест работает на m8? В любом случае, вот несколько предложений по улучшению (так как я уже знаю, чего вы пытаетесь достичь):

  • Не думаю, что вы хотите создать свое собственное дерево файлов. Вы просто хотите, чтобы пользователь передал закрытие 'filter' (как в вашем примере), которое вы затем применяете к исходному набору каталогов (например, sourceSets.main.java) с помощью метода FileTree.matching(Closure). Вы получите новое дерево файлов с примененным фильтром.
  • Я рекомендую использовать расширение вместо объекта соглашения
  • Вам не нужен длинный синтаксис при доступе к объектам соглашений или расширениям из кода Groovy. В вашем примере модульного теста вы можете просто сказать project.licenseFiles(...) {...}.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...