代码之家  ›  专栏  ›  技术社区  ›  sleon

宏def中concat目标中的蚂蚁字符串复制-为什么

  •  0
  • sleon  · 技术社区  · 7 年前

    我在antmacrodef中使用concat目标来生成ddl文件。一些属性字符串中字符串的一部分在生成的ddl中被复制。

    只有在从concat目标生成时才会观察到这种重复。

    我试过1)用破折号代替下划线,2)用${property name}代替@{property name},3)用echo target代替concat target,4)从ant1.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文件中的输出行是: SET CURRENT SCHEMA = 'REPLACE_SCHEMA_ID'

    0 回复  |  直到 7 年前
        1
  •  0
  •   sleon    7 年前

    据我所知,在使用echo或concat(至少在macrodef中)时有一个bug,如果属性的名称等于属性值的一部分,那么与名称不匹配的部分将被复制。

    <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@

    奇怪的行为,我愿意被证明是错误的,但这是我想出的。

    推荐文章