Скрипт Gradle: исключение Classcast в задании ant.copy - PullRequest
0 голосов
/ 07 июля 2019

У меня есть скрипт Gradle, в котором мне нужно скопировать кучу файлов из srcPath в tgtPath, указав шаблоны include и exclude.

Обычно я делал бы это с помощью встроенной в Gradle задачи копирования, но здесь мне также нужно при этом конвертировать кодировку символов. Поэтому я пытаюсь использовать метод ant.copy, потому что он поддерживает аргументы «encoding» и «outputEncoding», которые должны поддерживать именно такие преобразования.

Итак, я определил мне метод следующим образом:

private void copy(String srcPath, String tgtPath, includePatterns = ['**/*'], excludePatterns = []) {
    println "copying from '${srcPath}' to '${tgtPath}' (incl:'${includePatterns}' / excl:'${excludePatterns}'):"

    new AntBuilder().copy(todir: tgtPath, 
                          encoding: StandardCharsets.ISO_8859_1, 
                          outputEncoding: StandardCharsets.UTF_8) {
        fileset(dir: srcPath, 
                includes: includePatterns, 
                excludes: excludePatterns)
    }
}

Когда я выполняю это как часть моей сборки Gradle (фактически внутри файла .groovy, именно поэтому я использую здесь «новый AntBuilder.copy (...)» вместо просто «ant.copy (...)» «Я получаю следующее исключение:

java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration не может быть приведен к org.apache.xerces.xni.parser.XMLParserConfiguration

??? Какое отношение это имеет к XML-парсингу? Я вообще не понимаю, почему я получаю эту ошибку. Я нашел только пару примеров, но никакой реальной документации о том, как использовать этот метод от Groovy. Документация Ant утверждает, что «включает» и «исключает» принимает списки аргументов, что я и передаю здесь. Любая идея, что я здесь делаю неправильно или почему это не работает?

Или какие-либо другие предложения о том, как преобразовать кодировки символов при копировании файлов в Gradle?

1 Ответ

1 голос
/ 07 июля 2019

Я предлагаю вам использовать встроенную в Gradle интеграцию с муравьями .

Например:

project.ant.copy(todir: tgtPath, 
                          encoding: StandardCharsets.ISO_8859_1, 
                          outputEncoding: StandardCharsets.UTF_8) {
        fileset(dir: srcPath, 
                includes: includePatterns, 
                excludes: excludePatterns)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...