gpt4 book ai didi

ant - 在 Ant 复制任务过滤器中获取文件名

转载 作者:行者123 更新时间:2023-12-04 14:42:51 25 4
gpt4 key购买 nike

是否可以在 Ant 复制任务中获取正在复制的当前文件名?我正在尝试运行 beanshell 脚本并希望访问当前文件名:

<target>
<mkdir dir="${project.build.directory}/generated-sources"/>
<copy todir="${project.build.directory}/generated-sources"
includeemptydirs="true" failonerror="true" verbose="true">
<fileset dir="${project.build.sourceDirectory}"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<scriptfilter language="beanshell" byline="true"><![CDATA[
import java.io.BufferedReader;
import java.io.StringReader;
int count = 1;
BufferedReader br = new BufferedReader(new StringReader(self.getToken()));
StringBuilder builder = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
builder.append(line.replace("\"__LINE__\"", Integer.toString(count))).append('\n');
count++;
}
self.setToken(builder.toString());
]]></scriptfilter>
</tokenfilter>
</filterchain>
</copy>
</target>

最佳答案

这已经困扰了我一段时间 - 我希望有一个很好的方法来做到这一点,但我还没有找到它。

我看过“复制”任务的 Ant 源代码。实际复制在 ResourceUtils 中完成类,但源文件和目标文件的名称不会以可从过滤器链访问的方式公开。同样,对文件集的迭代发生在复制任务定义中,其中“当前”文件名不保存在公共(public)变量中。

我想出的最不坏的选择是使用 ant-contrib 'for' task遍历文件集并逐个复制每个文件。当您迭代时,文件的名称将在“param”属性中指定的属性中可用:

<for param="file.name">
<path>
<fileset dir="${project.build.sourceDirectory}"/>
</path>
<sequential>
<local name="file.name"/>
<property name="file.name" value="@{file.name}"/>
<copy file="${file.name}" ... >
...
<filterchain>
<scriptfilter ...>
...
current_file = project.getProperty( "file.name" );
...
</scriptfilter>
</filterchain>
...
</copy>
</sequential>
</for>

关于ant - 在 Ant 复制任务过滤器中获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com