ant build script issue

问题描述

| 我有2个名为\“ build \”和\“ tarne \”的蚂蚁构建脚本 建立:
<?xml version=\"1.0\" ?>
<project name=\"build\" default=\"zip\">

    <property name=\"project.name\" value=\"projectName\"/>
    <property name=\"version\" value=\"default_version_value\"/>


    <taskdef resource=\"net/sf/antcontrib/antcontrib.properties\">
        <classpath>
            <pathelement location=\"lib/build/ant-contrib.jar\"/>
        </classpath>
    </taskdef>  

    <var name=\"version2\" value=\"default_version_value\"/>


    <property name=\"tmp\" value=\"tmp\"/>  
    <property name=\"build.dir\" location=\"${tmp}/component/${project.name}\"/>
    <property name=\"java.classes\" location=\"${tmp}/component/${project.name}/classes\"/>
    <property name=\"weblayout.dir\" location=\"${tmp}/weblayout/resources/${project.name}\"/>


    <path id=\"compile.classpath\">
        <fileset dir=\"lib\" includes=\"**/*.jar\" />
        <fileset dir=\"lib/build\" includes=\"*.zip\" />
    </path>

    <target name=\"clean\">
        <delete dir=\"${tmp}\" />
    </target>

    <target name=\"init\" depends=\"clean\">
        <mkdir dir=\"${java.classes}\" />
    </target>

    <target name=\"compile\" depends=\"init\">
        <javac srcdir=\"src\" source=\"1.5\" target=\"1.5\" encoding=\"utf-8\" includes=\"**/*.java\" destdir=\"${java.classes}\" classpathref=\"compile.classpath\" />
    </target>

    <target name=\"copy-resources\" depends=\"compile\">

            //Lots of copying here

    </target>

    <target name=\"read.version\" description=\"Parses the hda file for your version number\">

        <property file=\"${project.name}.hda\" prefix=\"hda\"/>
        <propertyregex property=\"version\" input=\"${hda.version}\" regexp=\"\\.\" replace=\"-\" global=\"true\" override=\"true\"/>
        <var name=\"version2\" value=\"${version}\"/>

        <echo>${version}</echo>
        <echo>${version2}</echo>


    </target>

    <target name=\"zip\" depends=\"copy-resources,read.version\" description=\"Package component\">

        <zip destfile=\"${project.name}-${version}.zip\" basedir=\"${tmp}\" />
        <delete dir=\"${tmp}\" />

    </target>


</project>
塔恩:
<?xml version=\"1.0\" ?>
<project default=\"tarne\">

    <include file=\"build.xml\"/>
    <property name=\"project.name\" value=\"build.project.name\"/>

    <target name=\"tarne\">

        <antcall target=\"build.read.version\" inheritRefs=\"true\"></antcall>
        <property name=\"version\" value=\"build.version\"/>
        <property name=\"version2\" value=\"build.version2\"/>

        <echo>${version}</echo> 
        <echo>${version2}</echo>    



    </target>

</project>
运行tarne.xml时得到的输出是:
Buildfile: tarne.xml
tarne:
build.read.version:
     [echo] v1-0-1
     [echo] v1-0-1
     [echo] default_version_value
     [echo] default_version_value
前两行(v1-0-1)来自build.xml的read.version目标内部,后两行来自tarne.xml。通常的想法是,我应该能够在tarne.xml构建脚本中访问版本号。 关于出什么问题有什么想法吗?     

解决方法

Antcall不支持您打算做的事情: http://ant.apache.org/manual/Tasks/antcall.html: 被调用的目标在新项目中运行;请注意,这意味着被调用目标设置的属性,引用等不会持久化回调用项目。 您可以尝试:
  <target name=\"tarne\" depends=\"build.read.version\">
  </target>
这将保持新的价值。     ,尝试
<property name=\"version\" value=\"${build.version}\"/>         
 <property name=\"version2\" value=\"${build.version2}\"/>