2009-08-27 103 views
45

我已经有了iso-8859-1编码的java源文件。当我运行ant时,我得到“警告:用于编码UTF-8的不可映射字符”。如果我运行ant -Dfile.encoding = iso-8859-1或将encoding =“ISO-8859-1”添加到每个javac语句,我可以避免这种情况。如何在ant的build.xml中设置-Dfile.encoding?

有没有办法在build.xml中全局设置属性? < property name =“file.encoding”value =“ISO-8859-1”>不起作用。我知道我可以为每个javac语句添加一个foo = ISO-8859-1属性并将encoding =“$ {foo}”,但我试图避免这种情况。

+0

这个问题应该同时在四个地方解决:http://stackoverflow.com/a/34225997/715269 – Gangnus 2015-12-11 14:40:47

回答

31

有几个选项:

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

Ant本身不能设置系统属性,但是如果你真的想,你可以编写一个java程序来设置系统属性,并在Ant中执行它。

61

如果你有文件特别是,最好告诉javac,而不是强制整个JVM使用特定的编码。由于这个原因,javac task具有编码属性。

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

但实际上,您应该只将源文件转换为UTF-8。 UTF-8中的所有东西味道都更好。 :)

+1

即使您将内容转换为UTF-8,您有时也必须拥有一个干净的环境(LC_ALL = C ),那里非常方便。 – user1050755 2012-08-16 06:40:35

2

在更改构建文件之前,我得到像下面的java编译错误。

ApplicationConstant.java:73:错误:用于编码ASCII字符不可映射 public static final String INVALID_MDTVERSION_SECOND = " This not compatible with the server’s Version";

我有遇到此错误时我曾经有蚂蚁的java目标为:

<javac encoding="ascii"...> 

比我如下更改

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

此问题得到解决。