java - ANT:将字符串拆分为多个参数

标签 java ant ant-contrib xmltask

我刚刚完成了 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 的通用应用程序 - 已经完成并且运行良好。现在应用程序需要需要构建/部署的单独插件。

该脚本将做什么:

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。 这是否可行,如果可以,请您帮我想一下如何做。

最佳答案

如果您首先以“命名空间”方式定义属性键,我认为您会发现更容易实现您所需要的,例如

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

现在您拥有一组具有唯一键的属性,您可以在循环和/或宏定义中交叉引用它们。

以下是如何使用它的示例:

<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

关于java - ANT:将字符串拆分为多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368189/

相关文章:

java - 在 Java 中读取 CSV 文件时出现问题。仅读取第一行

java - JPA ManyToMany ConcurrentModificationException 问题

java - 如何将具有列表属性的对象列表转换为一个包含所有列表属性项的列表

java - 显示菜单编译错误

jsp - 在 Apache Tomcat 8.0.12 中编译 JSP 时出错

c++ - 为什么这个 Ant 脚本不起作用?

Ant脚本生成的Java Jar不支持用户输入

ant - 如何在Ant中使用类似数组或列表的内容?

java - 文件路径的 Ant Propertyregex 部分

java - 循环内循环迭代 6 次,但打印 9 次而不是 3 次