我在ant macrodef中使用concat目标来生成ddl文件。 一些属性字符串中的字符串的一部分在生成的 ddl 中重复
。仅当从 concat 目标生成时,才会观察到这种重复。
我尝试了 1( 使用破折号而不是下划线,2( 使用 ${property-name} 而不是 @{property-name},3( 使用 echo 目标而不是 concat 目标,4( 从 ant 1.9.3 切换到 1.10.5,以及 5( 进行在线搜索
在 ant 脚本中设置属性 <property name="SCHEMA_ID" value="REPLACE_SCHEMA_ID" />
在宏定义中设置的属性 <attribute name="schema-id" default="${SCHEMA_ID}" />
康卡特目标
<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 文件中的输出行是: SET CURRENT SCHEMA = 'REPLACE_SCHEMA_ID'
据我所知,使用 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@
奇怪的行为,我愿意被证明是错误的,但这就是我想出的。