我在Eclipse中有一个Ant任务从文件中获取版本:
<loadfile property="version" srcfile="version.txt">
<filterchain>
<linecontainsregexp>
<regexp pattern="^#define version .(d{1,10}).(d{1,10}).(d{1,10}).(d{1,10})."/>
</linecontainsregexp>
<replaceregex
pattern="^#define version .(d{1,10}).(d{1,10}).(d{1,10}).(d{1,10})..*$"
replace="1.2.3.4" />
</filterchain>
</loadfile>
<echo message="Version ${version}"/>
显示不带换行符的版本。进一步在代码中,我想使用属性与移动任务:
<move file="${dir}file.exe"
tofile="${outputdir}output-${version}-xxx.exe"
overwrite="true"
force="true" />
但是由于消息
,它失败了BUILD FAILED build.xml:26: Failed to copy pathfile.exe to pathoutput_directoryoutput-1.0.0.0
-xxx.exe due to output-1.0.0.0
-xxx.exe (Název souboru či adresáře nebo jmenovka svazku je nesprávná)
(最后一行表示文件名无效,显然中间包含换行符)
我哪里错了?是财产本身吗?甚至加上
一行<replaceregex pattern=" " replace="" flags="s"/>
或其他从属性中删除换行符的尝试不会改变任何内容。
你需要去掉换行符,例如:
<filterchain>
<linecontainsregexp ... />
<replaceregex ... />
<striplinebreaks />
</filterchain>
如果您将<echo>
修改为:
<echo message="Version -${version}-"/>
你会清楚地看到效果