这应该是一个常见的问题,但我无法弄清楚如何去做,希望能在这里提供一些指导。
问题:
我需要使用ant替换一组XML配置文件(weblogic config.xml文件)中的一些但不是所有应用程序版本(ant-contrib也可以使用)。
我有一个应该有新版本集的应用程序列表,以及它们应该具有的版本,并且我有需要替换的配置文件。
到目前为止我走的道路:
我创建了一个带三个参数的宏;应用程序名称,应用程序版本和配置文件
这将从循环中调用。
这就是我现在所拥有的:
<macrodef name="update-template-config-file">
<attribute name="application-name" />
<attribute name="application-version" />
<attribute name="config-file-name" />
<sequential>
<local name="match-string"/>
<local name="replace-string"/>
<property name="match-string" value="@{application-name}#[0-9](\.[0-9])*"/>
<property name="replace-string" value="@{application-name}#@{application-version}"/>
<echo>match ${match-string} replace: ${replace-string} in @{config-file-name}</echo>
<replaceregexp file="@{config-file-name}"
match="${match-string}"
replace="${replace-string}"
byline="true"/>
</sequential>
</macrodef>
所以这个问题是,replaceregexp的匹配部分被解释为正则表达式(正确),我想知道是否有办法使用&#39; match-string&#39的值;财产而不是它的名称。
解决方法:
从ant脚本中,通过回显每个循环的替换指令来创建一个新的ant脚本,然后调用创建的ant文件来执行替换。
为了完整性,请调用宏的目标
<target name="update-template-config-files">
<for param="config-file">
<path>
<fileset dir="${RP_CONTENT_ROOT_DIR}/domain_templates" includes="**/config.xml"/>
</path>
<sequential>
<for param="application-file">
<path>
<fileset dir="${STAGE_ROOT}/applications" includes="*.*"/>
</path>
<sequential>
<local name="filename"/>
<basename property="filename" file="@{application-file}"/>
<update-template-config-file application-name="${filename}" application-version="5.1.0.3.0" config-file-name="@{config-file}" />
</sequential>
</for>
</sequential>
</for>
</target>
答案 0 :(得分:0)
我的脚本出错,忘了从应用程序名称中删除后缀。
感谢vio1331让我再一次看回声线。
查找以下更新的代码段(但仅适用于ear文件)
<target name="update-template-config-files">
<for param="config-file">
<path>
<fileset dir="${RP_CONTENT_ROOT_DIR}/domain_templates" includes="**/config.xml"/>
</path>
<sequential>
<for param="application-file">
<path>
<fileset dir="${STAGE_ROOT}/wlng/applications" includes="*.ear"/>
</path>
<sequential>
<local name="filename"/>
<basename property="filename" file="@{application-file}" suffix=".ear"/>
<update-template-config-file application-name="${filename}" application-version="5.1.0.3.0" config-file-name="@{config-file}" />
</sequential>
</for>
</sequential>
</for>
</target>