如何在Ant的build.xml中设置-Dfile.encoding?

49
我有一些使用iso-8859-1编码的Java源文件。当我运行ant时,会出现“warning: unmappable character for encoding UTF-8”的警告。如果我运行ant -Dfile.encoding=iso-8859-1或在每个javac语句中添加encoding="ISO-8859-1",就可以避免这种情况。
是否有一种方法可以在build.xml文件中全局设置属性?<property name="file.encoding" value="ISO-8859-1">无法起作用。我知道可以添加一个foo=ISO-8859-1属性,并将encoding="${foo}"设置为每个javac语句,但我试图避免这样做。

问题应该同时在四个地方解决:https://dev59.com/tW855IYBdhLWcg3wq2TL#34225997 - Gangnus
4个回答

76

如果您有以特定方式编码的文件,请告诉javac,而不是强制整个JVM使用特定编码。出于这个原因,javac任务具有一个编码属性。

<javac srcdir="${src.dir}" destdir="${build.classes.dir}" encoding="iso-8859-1" />

但是,你应该将源文件转换为UTF-8。 在UTF-8中,所有东西都更美味。 :)


1
即使您将内容转换为UTF-8,有时仍需要一个干净的环境(LC_ALL=C),这时它非常方便。 - user1050755

37

几个选项:

  1. -Dfile.encoding=iso-8859-1 添加到您的 ANT_OPTS 环境变量中
  2. 使用 <presetdef> 为所有 <javac> 调用设置默认值

3
更改构建文件之前,我遇到了以下Java编译错误:
ApplicationConstant.java:73: 错误:编码 ASCII 中的非可映射字符
public static final String INVALID_MDTVERSION_SECOND = " This not compatible with the server’s Version";
我遇到这个错误是因为我以前将ant java目标设置为:
 <javac encoding="ascii"...>

然后我做了以下更改

<javac encoding="iso-8859-1" ...> 

这个问题已经解决了。


1

Ant本身不能设置系统属性,但如果您真的想要设置,可以编写一个设置系统属性的Java程序,并从Ant中执行该程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接