Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANT:将字符串拆分为多个参数_Java_Ant_Ant Contrib_Xmltask - Fatal编程技术网

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

Java ANT:将字符串拆分为多个参数,java,ant,ant-contrib,xmltask,Java,Ant,Ant Contrib,Xmltask,我刚完成一个剧本(做得很好)。 但有一个新的要求,脚本必须改变。 目标是让ANT部署文件名为deployall.txt。该文件看起来像 client1=name1=server1+server2=repositoryX client2=name2=server1+server3=repositoryY client3=name3=server2+server4=repositoryZ 只有一个客户端、一个名称、一到几个服务器、一个存储库和一种类型 目标是:对于每一行,我需要获取变量,以便能够解

我刚完成一个剧本(做得很好)。 但有一个新的要求,脚本必须改变。 目标是让ANT部署文件名为
deployall.txt
。该文件看起来像

client1=name1=server1+server2=repositoryX
client2=name2=server1+server3=repositoryY
client3=name3=server2+server4=repositoryZ
只有一个客户端、一个名称、一到几个服务器、一个存储库和一种类型

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

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)
因此,我可以执行所有任务,但不能将每个元素作为每行的单独参数进行解析。我尝试了列表和顺序的
,但到目前为止没有成功。我可以分离所有参数,但只能作为一个参数。我不能将其作为多个参数来获取,我可以循环遍历每一行并解析到其他任务

因为这只是一个开始——我可以改变设计——比如用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