在ANT構建文件上工作,其中我定義了兩個宏並需要從其他宏調用一個宏。javascript + ANT問題
這是我需要做的事情(爲了便於理解,我簡化了整個場景)。我的主要目標是用兩個參數調用FirstMacro。第一個宏需要收到兩個參數,然後對SecondMacro進行嵌入式調用。
傳遞給FirstMacro的參數之一是一個帶有「反斜槓」()的文件路徑。當我使用echo在宏中打印時,它的打印效果很好。但是當我通過JavaScript將相同的參數傳遞給SecondMacro時,反斜槓消失了(而不是C:\ Test我看到C:Test)。 什麼是保留反斜槓或用正斜槓替換它們的解決方案。
請注意,我使用ANT 1.7和我已經嘗試與string.replace(/ \ /克,「/」)等
還要注意的是,你可以複製粘貼下面的整個代碼,將其保存作爲build.xml並嘗試運行主任務以查看運行中的問題。
<?xml version="1.0"?>
<project name="build" basedir="." default="main">
<description>
==========================
Macro: Second Macro
==========================
</description>
<macrodef name="secondMacro">
<attribute name="param"/>
<sequential>
<echo>secondMacro param: @{param}</echo>
</sequential>
</macrodef>
<description>
==========================
Macro: FirstMacro
==========================
</description>
<macrodef name="firstMacro">
<attribute name="param1"/>
<attribute name="param2"/>
<sequential>
<echo>firstMacro first param: @{param1}</echo>
<echo>firstMacro second param: @{param2}</echo>
<script language="javascript">
<![CDATA[
var ext = "@{param2}";
if ("".equals(ext)) {
ext = "out";
}
macrotask = project.createTask("secondMacro");
macrotask.setDynamicAttribute("param", "@{param1}" + "."+ext);
macrotask.perform();
]]>
</script>
</sequential>
</macrodef>
<description>
==========================
Target: main target
==========================
</description>
<target name="main">
<firstMacro param1="C:\TestFolder/TestFile" param2=""/>
</target>
</project>
謝謝。但問題是Param1不在我的控制之下,它可能有一個「反斜槓」。如果我可以避免使用Javascript,一些如何可以通過使用條件任務等,這個問題可能被繞過。 – niner
更新了我的答案。你可以使用Ant-contrib任務嗎?它提供了if結構。 – coolcfan
謝謝!是的,我研究了這一點,似乎解決了這個問題。我發現的另一種替代方法是使用ANT 1.8,並使用屬性與一起使用。 –
niner