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

时间:2009-08-27 07:09:55

标签: java ant character-encoding javac

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

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

4 个答案:

答案 0 :(得分:67)

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

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

但实际上,您应该将源文件转换为UTF-8。在UTF-8中,一切都味道更好。 :)

答案 1 :(得分:33)

一些选择:

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

答案 2 :(得分:3)

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

ApplicationConstant.java:73:错误:编码ascii的不可映射的字符  // Load .svg image airplane->load("AirplaneTopDown.svg"); // Downsize image airplaneSmall = airplane->scaled(120, 120,Qt::KeepAspectRatio); // Rotate image by trans airplaneSmall = airplaneSmall.transformed(trans); // Draw image and center at a certain screen position painter.drawImage(airplaneX-airplaneSmall.width()/2,airplaneY-airplaneSmall.height()/2,airplaneSmall);

当我曾经将ant java target作为:

时,我遇到了这个错误
public static final String INVALID_MDTVERSION_SECOND = " This not compatible with the server’s Version";

比我改变如下

 <javac encoding="ascii"...>

这个问题已经解决了。

答案 3 :(得分:1)

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