gradle - Gradle脚本:ant.copy任务中的Classcast异常

标签 gradle groovy ant

我有一个Gradle脚本,在其中需要将一堆文件从srcPath复制到tgtPath,同时指定包含和排除模式。

通常,我会使用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文件中),这就是为什么我在这里使用“new AntBuilder.copy(...)”而不是仅使用“ant.copy(...)”的原因以下异常:

java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration



???这与XML解析有什么关系?我根本不明白为什么会收到此错误。
我仅从Groovy中找到了几个示例,但没有有关如何使用此方法的真实文档。 Ant的文档声称“包含”和“排除”接受参数列表,这就是我在此处传递的内容。任何想法,我在这里做错什么,还是为什么这不起作用?

或关于在Gradle中复制文件时如何转换字符编码的任何其他建议?

最佳答案

我建议您使用Gradle的built in ant integration

例如:

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

关于gradle - Gradle脚本:ant.copy任务中的Classcast异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56918043/

相关文章:

testing - stub 常规类的所有方法?

android - 通过主 ANT 构建文件构建多个 android 项目

apache-flex - 使用 ant mxmlc 任务将运行时库路径添加到 Flex 构建配置

java - 可执行 jar 不读取 .properties 文件 (Build.xml)

android - Android Studio 中缺少 aidl

gradle - 无法创建类型为 'ShadowJar' 的任务

java - 为什么 Gradle 试图为我的项目查找资源包?

properties - Gradle 任务检查是否定义了属性

java - groovy 是否有一种简单的方法来获取没有扩展名的文件名?

testing - 在 Groovy 中如何模拟在另一个对象中实例化的对象?