проблема со скриптом сборки ant

#ant #ant-contrib

#ant #ant-contrib

Вопрос:

У меня есть 2 скрипта сборки ant с именами «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>
  

Tarne:

 <?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
  

Где первые 2 строки (v1-0-1) находятся внутри целевого объекта read.version из build.xml и следующие 2 строки взяты из tarne.xml. Общая идея заключается в том, что я должен иметь доступ к номеру версии в моем tarne.xml скрипт сборки.

Есть идеи о том, что происходит не так?

Ответ №1:

Antcall не поддерживает то, что вы собираетесь делать:

http://ant.apache.org/manual/Tasks/antcall.html: Вызываемые целевые объекты выполняются в новом проекте; имейте в виду, что это означает, что свойства, ссылки и т.д., установленные вызываемыми целевыми объектами, не будут сохраняться в вызывающем проекте.

вы могли бы попробовать:

   <target name="tarne" depends="build.read.version">
  </target>
  

который сохранит новые значения.

Комментарии:

1. Это сработало, однако Eclipse кричит на меня сообщением «Целевая сборка.read.version не существует в этом проекте» (он работает нормально, просто Eclipse не может найти цель, поскольку она импортирована). Есть идеи о том, как это передать?

2. depends =»read.version» должно быть правильным при импорте build.xml

Ответ №2:

Попробуйте

 <property name="version" value="${build.version}"/>         
 <property name="version2" value="${build.version2}"/>