ant用添加到zip文件中的文件中的行号替换令牌



我正在使用Ant创建一个zip文件。我还想用令牌所在的行号替换压缩文件中的令牌。我曾尝试使用FilterChain,但我不知道如何使用zipfileset。有什么建议吗?


我在这里添加一个例子。假设我有一个文件test.js,如下所示:

function start(){
   console.debug("Start");
}
function end(){
   console.debug("End");
}
function processLine(line){
   console.debug("processLine"/*--location--*/);
}

我想用"test.js:10"替换/*--location-*/。我已经创建了一个FilterReader,它可以写入行号

@Override
public int read() throws IOException {
    if (!getInitialized()) {
        initialize();
        setInitialized(true);
    }
    int ch = -1;
    if (line != null) {
        ch = line.charAt(0);
        if (line.length() == 1) {
            line = null;
        } else {
            line = line.substring(1);
        }
    } else {
        lineNumber++;
        line = readLine();
        System.out.println("line " + line);
        if (line != null) {
            line = line.replace("/*--location--*/", ","pagina:"+lineNumber+""");
            return read();
        }
    }
    return ch;
}

我可以使用带有过滤链的副本来调用它

<copy file="${src}/ant-util/test/resources/box.js" tofile="${installation}/box.js">
  <filterchain>
    <filterreader classname="com.xxx.util.ant.AddLineNumberReaderFilter"/>
  </filterchain>
</copy>         

但我不知道如何获取文件名。然后我想在压缩文件时使用这个过滤器,而不是复制。

<copy file="${src}/ant-util/test/resources/box.js" tofile="${installation}/box.js">
<filterchain>
 <filterreader classname="com.xxx.util.ant.AddLineNumberReaderFilter">
  <param name="name" value="value"/>
 </filterreader>
</filterchain>
</copy>  

在Ant Reader类中,创建setter/getter方法

public void setName(String filename)
public String getName()

尝试在FilterReader 的构造函数中调用此方法

private String determineFilepath() {
    String result = null;
    Object obj = lock;
    while(obj != null && !(obj instanceof FileInputStream)) {
        obj = findField(obj, "lock");
    }
    if(obj instanceof FileInputStream) {
        result = (String)findField(obj, "path");
    }
    return result;
}
private Object findField(Object obj, String fieldName) {
    Object result = null;
    if(obj != null) {
        Class<? extends Object> clazz = obj.getClass();
        Field field = null;
        while(clazz != null) {
            try {
                field = clazz.getDeclaredField(fieldName);
            }
            catch(NoSuchFieldException e) {}
            if(field != null) {
                break;
            }
            else {
                clazz = clazz.getSuperclass();
            }
        }
        if(field != null) {
            field.setAccessible(true);
            try {
                result = field.get(obj);
            }
            catch(IllegalArgumentException | IllegalAccessException e) {}
        }
    }
    return result;
}

相关内容

  • 没有找到相关文章

最新更新