1

我一直在尝试用 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。

麻烦的文件来自第三方,所以我不能轻易更改它。我可以做些什么来让 buildr 正确处理它吗?

4

1 回答 1

1

我相信 buildr 在 Ruby 1.9(或兼容)红宝石上读取 POM 的方式存在错误。它假定 POM 的 XML 可以在 ruby​​ 的默认外部编码中读取。在我使用 ruby​​ 1.9.3-p194 的机器上,编码为 UTF-8(因此 commons-exec POM 可以正常读取),但在您的环境中,默认编码似乎是 US-ASCII(导致您的问题)。您可以通过在构建文件中放置puts Encoding.default_external.inspect某个位置并查看它为您提供的内容来确认这一点。

只要您希望构建器读取的所有文件都是 UTF-8(或 UTF-8 兼容,如 ASCII),您应该能够通过将以下内容放在构建文件的顶部来解决此问题:

Encoding.default_external = 'UTF-8'

看看这是否有效。如果是这样,我鼓励您向 buildr 提交错误,以便他们了解问题。(一般来说,你不想被弄乱,Encoding.default_external因为它是一个全局设置。)

于 2012-11-14T04:38:04.413 回答