将字符串列表映射到依赖集的文件资源集合



Background:我从XML文件中读取名称,并希望将它们映射到构建任务的源路径和目标路径。我不是一个有经验的Ant用户,我正在寻找一种方法,这是

  1. "可读性"
  2. 鲁棒和
  3. 可用于确定目标是否过期(最好使用Ant或Ant Contrib中的任务)。

示例xml:

<list><value>The first name<value><value>The second name</value></list>

理想结果集:

${dir}/The first name.${ext}
${dir}/The second name.${ext}

我可以使用pathconvertmappedresources构建每个文件的路径,但我无法将结果映射回我可以在dependset中使用的文件资源集合。是否有一个优雅的解决方案来解决这个问题?

ANT不是一种编程语言。轻松嵌入groovy。

<标题> 例子
├── build.xml
├── sample.xml
├── src
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
└── target
    ├── file1.txt
    └── file2.txt

执行如下命令

$ ant
Buildfile: /.../build.xml
install-groovy:
build:
     [copy] Copying 2 files to /.../target
     [copy] Copying /.../src/file1.txt to /.../target/file1.txt
     [copy] Copying /.../src/file2.txt to /.../target/file2.txt
BUILD SUCCESSFUL

sample.xml

<list>
<value>file1</value>
<value>file2</value>
</list>

build . xml

<project name="demo" default="build">
    <!--
    ================
    Build properties
    ================
    -->
    <property name="src.dir"   location="src"/>
    <property name="src.ext"   value="txt"/>
    <property name="build.dir" location="target"/>
    <available classname="org.codehaus.groovy.ant.Groovy" property="groovy.installed"/> 
    <!--
    ===========
    Build targets
    ===========
    -->    
    <target name="build" depends="install-groovy" description="Build the project">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
        <groovy>
        def xmllist = new XmlSlurper().parse(new File("sample.xml"))
        ant.copy(todir:properties["build.dir"], verbose:true, overwrite:true) {
           fileset(dir:properties["src.dir"]) {
              xmllist.value.each {
                include(name:"${it}.${properties["src.ext"]}") 
              }
           }
        }
        </groovy>
    </target>
    <target name="clean" description="Cleanup project workspace">
       <delete dir="${build.dir}"/>
    </target>
    <target name="install-groovy" description="Install groovy" unless="groovy.installed">
        <mkdir dir="${user.home}/.ant/lib"/>
        <get dest="${user.home}/.ant/lib/groovy.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.3.6/groovy-all-2.3.6.jar"/>
        <fail message="Groovy has been installed. Run the build again"/>
    </target>
</project>

相关内容

  • 没有找到相关文章

最新更新