Ant-宏定义中concat目标中的字符串重复-为什么

时间:2019-04-01 16:31:55

标签: apache ant concat macrodef

我在ant macrodef中使用concat目标来生成ddl文件。几个属性字符串中的一部分字符串将在生成的ddl中重复。

仅当从concat目标生成时才观察到此重复。

我尝试过1)使用破折号而不是下划线,2)使用$ {property-name}代替@ {property-name},3)使用echo target代替concat target,4)从ant 1.9切换。 3至1.10.5,以及5)进行在线搜索

在ant脚本中设置了属性     <property name="SCHEMA_ID" value="REPLACE_SCHEMA_ID" />

在macrodef中设置的属性     <attribute name="schema-id" default="${SCHEMA_ID}" />

Concat目标

<concat destfile="@{dest-dir}/@{spname}.ddl">
SET CURRENT SCHEMA = '@{schema-id}'
@@@@
SET CURRENT SQLID = '@{sql-id}'
@@@@
</concat>

ddl文件中的输出行     SET CURRENT SCHEMA = 'REPLACE_REPLACE_SCHEMA_ID'

我希望ddl文件中的Output行是:     SET CURRENT SCHEMA = 'REPLACE_SCHEMA_ID'

1 个答案:

答案 0 :(得分:0)

据我所知,在使用echo或concat时(至少在macrodef中)存在一个错误,即如果属性名称等于属性值的一部分,则该值的一部分不匹配名称重复。

<property name="SCHEMA_ID" value="REPLACE_SCHEMA_ID" /> becomes REPLACE_REPLACE_SCHEMA_ID
<property name="SCHEMA_ID" value="@SCHEMA_ID@" /> becomes @@SCHEMA_ID@@

但是     <property name="SCHEMA_ID" value="@schema_id@" /> becomes @schema_id@

奇怪的行为,我很容易被证明是错误的,但这就是我想出的。