我一直在尝试使用buildr代替maven进行项目。
当我请求给定包的瞬态依赖时,我收到此错误:
$ buildr --trace=all
...
** Invoke /home/tcc/timd/.m2/repository/org/slf4j/slf4j-api/1.5.6/slf4j-api-1.5.6.pom (first_time, not_needed)
Loading m2 pom file from /home/tcc/timd/.m2/repository/org/slf4j/slf4j-api/1.5.6/slf4j-api-1.5.6.pom
** Invoke /home/tcc/timd/.m2/repository/org/slf4j/slf4j-parent/1.5.6/slf4j-parent-1.5.6.pom (first_time, not_needed)
Loading m2 pom file from /home/tcc/timd/.m2/repository/org/slf4j/slf4j-parent/1.5.6/slf4j-parent-1.5.6.pom
** Invoke /home/tcc/timd/.m2/repository/org/apache/commons/commons-exec/1.0/commons-exec-1.0.pom (first_time, not_needed)
Loading m2 pom file from /home/tcc/timd/.m2/repository/org/apache/commons/commons-exec/1.0/commons-exec-1.0.pom
Buildr aborted!
ArgumentError : invalid byte sequence in US-ASCII
...
$
我可以确认文件commons-exec-1.0.pom是非US-ASCII字符。但我相信它们是有效的UTF-8。
麻烦的文件来自第三方,所以我无法轻易改变它。有什么我可以做的建立 正确处理它?</ p>
答案 0 :(得分:1)
我相信buildr在Ruby 1.9(或兼容)rubies上读取POM的方式存在一个错误。它假定可以使用ruby的默认外部编码读取POM的XML。在我的机器上使用ruby 1.9.3-p194,编码是UTF-8(所以commons-exec POM读得很好),但是在你的环境中,默认编码似乎是US-ASCII(导致你的问题)。您可以通过将puts Encoding.default_external.inspect
放在构建文件中的某个位置并查看它为您提供的内容来确认这一点。
只要您想要构建器读取的所有文件都是UTF-8(或UTF-8兼容,如ASCII),您应该能够通过将以下内容放在构建文件的顶部来解决此问题:< / p>
Encoding.default_external = 'UTF-8'
看看是否有效。如果是这样,我鼓励你提交一个针对buildr的bug,以便他们知道问题。 (一般来说,你不想弄乱Encoding.default_external
,因为它是一个全局设置。)