我在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'
答案 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@
奇怪的行为,我很容易被证明是错误的,但这就是我想出的。