Ant作业为String Password字段添加转义字符

时间:2015-02-04 22:26:01

标签: java ant jenkins build jenkins-plugins

我有一个我从Jenkins调用的Ant构建。 Jenkins作业有参数,其中一个是密码字符串(Jenkins中的“密码参数”)。

在属性文件中写入密码的Ant目标指定为:

<target name="pwd-properties">
        <echo>Password is: ${password}</echo>   
       <propertyfile file="data.properties" comment="property file">
          <entry key="Pwd" value="${password}" />                 
       </propertyfile>
    </target>

密码是

  

我是密码!

但是,在构建机器中它显示为

  

我是密码\!

在属性文件中。然而,回声显示正确。

有人能说出它是如何在密码字符串中获得额外的转义字符的吗?

1 个答案:

答案 0 :(得分:2)

它与Ant无关 - 这只是Properties.store记录的行为:

  

然后写出此Properties表中的每个条目,每行一个。对于每个条目,写入密钥字符串,然后是ASCII =,然后是关联的元素字符串。对于密钥,所有空格字符都使用前面的\字符编写。对于元素,前导空格字符,但不是嵌入或尾随空格字符,使用前面的\字符编写。键和元素字符#!=:使用前面的反斜杠编写,以确保它们已正确加载。

示例代码:

import java.io.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws Exception {
        StringWriter writer = new StringWriter();
        Properties props = new Properties();
        props.setProperty("key", "value!");
        props.store(writer, "Demo");
        System.out.println(writer);
    }
}

输出:

#Demo
#Wed Feb 04 22:38:55 GMT 2015
key=value\!

换句话说,一切都很顺利。

转义的原因是因为!用于评论。来自Properties.load

  

注释行有ASCII'#'或'!'作为它的第一个非白色空间角色;注释行也会被忽略,不会对关键元素信息进行编码。

现在它可以有条件地转义 - 换句话说,只有它本来可以充当注释字符 - 但最简单的就是一直逃避它。