扩展现有的ant路径标记

时间:2016-07-01 12:33:15

标签: java ant

是否可以扩展ant构建文件中的现有路径标记?例如,我想扩展:

<path id="project.classpath">
  <pathelement path="build/classes" />
</path>

使用新的path=module/lib。所以结果相当于:

<path id="project.classpath">
  <pathelement path="build/classes" />
  <pathelement path="module/lib" />
</path>

1 个答案:

答案 0 :(得分:0)

如果你尝试这样的话,你不能直接扩展现有的路径:

SELECT ProdID,
        Date,
        (SELECT Price
        FROM   PRICE_TABLE P
        WHERE  P.ProdID = S.ProdID
        AND    P.Date = (SELECT MIN(P2.Date)
                         FROM   PRICE_TABLE P2
                         WHERE  P2.ProdId = P.ProdID
                         AND    P2.Date >= S.Date))
FROM   SALES_HISTORY S;

由于您正在尝试读取并同时设置路径的“圆形”,它将失败。

你可以通过添加额外的步骤来打破圆圈,从而做到你想要的。在每次设置路径之前,将当前值存储在<string>资源中:

<path id="project.classpath">
  <pathelement path="build/classes" />
</path>

<path id="project.classpath">
  <pathelement path="${ant.refid:project.classpath}" />
  <pathelement path="module1/lib" />
</path>

运行时会产生类似的结果:

<path id="cp">
  <pathelement path="build/classes" />
</path>
<echo message="${ant.refid:cp}" />

<string id="cps" value="${toString:cp}" />
<path id="cp">
  <pathelement path="${ant.refid:cps}" />
  <pathelement path="module1/lib" />
</path>
<echo message="${ant.refid:cp}" />

<string id="cps" value="${toString:cp}" />
<path id="cp">
  <pathelement path="${ant.refid:cps}" />
  <pathelement path="module2/lib" />
</path>
<echo message="${ant.refid:cp}" />

您每次都会将[echo] /ant/path/build/classes [echo] /ant/path/build/classes:/ant/path/module1/lib [echo] /ant/path/build/classes:/ant/path/module1/lib:/ant/path/module2/lib 重新分配到不同的路径。通常这是一个坏主意,因为你不能确定在构建中的每个点使用了什么路径:所以要小心使用。