Gradle 脚本:ant.copy 任务中的类广播异常
Gradle script: Classcast Exception in ant.copy task
我有一个 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 的文档声称 "includes" 和 "excludes" 接受我在这里传递的参数列表。任何想法,我在这里做错了什么或者为什么这不起作用?
或者关于在 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 脚本,我需要在其中将一堆文件从 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 的文档声称 "includes" 和 "excludes" 接受我在这里传递的参数列表。任何想法,我在这里做错了什么或者为什么这不起作用?
或者关于在 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)
}