我刚刚完成了ANT脚本(可以很好地完成工作)。 但是有一个新的要求,脚本必须更改。 目标是拥有一个称为deploy-all.txt ANT部署文件。 该文件看起来像

client1=name1=server1+server2=repositoryX
client2=name2=server1+server3=repositoryY
client3=name3=server2+server4=repositoryZ

将只有1个客户端,只有一个名称,从1到几个服务器,只有一个存储库和一种类型。

目标是:对于每一行,我都需要获取变量,以便我可以解析它们并执行任务。 输出应为

client=client1
name=name1
server=server1
server=server2 (could be more)
repository=repository1

这些参数必须针对每一行进行解析。 我确实有一个名为GENERIC.WAR的通用APP,它已经完成并且运行良好。 现在,应用程序需要单独的插件,这些插件需要构建/部署。

该脚本将执行以下操作:

a) copy generic GENERIC.WAR file to server1 and server2 with name scecified as client1 (SCP using scp task)
b) get svn repository based on repositoryX (svn update ant task)
c) get name and loop through existing code (using xmltask from checked out repository) to find right code to compile and zip it (have done it already)

因此,我可以执行所有任务,但不能将每个元素解析为每一行的单独参数。 我尝试for listsequential但到目前为止没有成功。 我可以将所有参数分开,但只能作为1个参数。 我无法获得它,因为我可以遍历每一行并解析为其他任务的多个参数。

因为这只是一个开始-我可以更改设计-例如以XML代替TXT。 它可行吗?如果可以,请帮助我了解如何操作。

#1楼 票数:4 已采纳

如果您开始以“命名空间”的方式定义属性键,那么我认为您会发现实现所需的内容更加容易,例如

client.list=client1,client2
client1.name=client1
client1.server.list=server1,server2
client1.repository=repositoryX
client2.name=name2
client2.server.list=server1,server3
client2.repository=repositoryY

现在,您有了带有唯一键的一组属性,可以在循环和/或macrodef中进行交叉引用。

这是一个如何使用它的示例:

<property file="deploy-all.txt"/>

<target name="test">
    <for list="${client.list}" param="client">
        <sequential>
            <deploy client="@{client}"/>
        </sequential>
    </for>
</target>

<macrodef name="deploy">
    <attribute name="client"/>
    <sequential>
        <echo>client: @{client}</echo>
        <for list="${@{client}.server.list}" param="server">
            <sequential>
                <echo>server: @{server}</echo>
            </sequential>
        </for>
        <echo>repository: ${@{client}.repository}</echo>
    </sequential>
</macrodef>

输出:

test:
     [echo] client: client1
     [echo] server: server1
     [echo] server: server2
     [echo] repository: repositoryX
     [echo] client: client2
     [echo] server: server1
     [echo] server: server3
     [echo] repository: repositoryY

  ask by ES Su translate from so

未解决问题?本站智能推荐:

1回复

用于检查xml文件中是否存在xml节点的Ant任务

我里面有要添加xml的xml文件 我想检查节点是否已经存在,然后要更新此节点,然后添加新节点。 我是ant xmltask的新手,所以我的问题可能很简单。 关于,Avinash Nigam
2回复

在Ant脚本中查找资源参考XML标签

我想使用ant脚本以编程方式删除XML块。 我找到了很棒的xmltask任务,但是对于我一生来说,我找不到想要删除的resource-ref节点。 这是我的XML文档的一部分。 来自使用标准DTD的web.xml文件: 我试图像这样删除第二个resource-ref块: 但是,它
1回复

如何使用Ant扩展xml文件中的非实体引用

我有一个包含以下内容的XML文件: 我想读的蚂蚁这个文件,并把的属性值value在<entry>其节点name值是“full_path”与蚂蚁的属性。 我可以轻松地做到这一点,例如,将<xmltask>及其<copy>元素一起使用: 但是,我得到的
1回复

ANT-从多个包中加载多个Java文件

我有几个文件分散在多个软件包中。 我需要一个一个地加载文件并使用ANT执行操作,但是每当尝试尝试时,都只会加载一个文件。 对于前。 我有2班- com.abc.one.One和com.bcd.two.Two。 以下脚本在两个循环迭代中都打印两个文件名,但仅打印第一个文件作为已加载文件
2回复

使用Ant条件标记

我想做这样的事情 当我尝试编译代码时,它给了我以下错误 这是正确的做法吗?
1回复

ant-contrib:outofdate的问题

我有一个非常类似于outofdate示例的情况(参见gengrammer , http : gengrammer ):我有一个包含*.class和*.seq文件的文件夹应该在plantuml (一个java程序)的帮助下转换为*.pdf 。 这是我目前的任务: 我无法运行它,因为在${d
1回复

命名空间在ant构建文件中如何工作?

我正在尝试使用ant-contrib,但我注意到有时它用于指定ac:名称空间,有时却不使用。 什么时候应该使用名称空间,为什么?
1回复

com/googlecode/flyway/ant/antlib.xml。找不到

我正在尝试做蚂蚁建造。 我在配置下面有build抱怨- 构建完成并显示成功消息,并抱怨如下: [taskdef]无法从资源com / googlecode / flyway / ant / antlib.xml加载定义。 找不到。 请提出建议。