2011-03-29 15 views
5

Estoy trabajando en un proceso de compilación Ant para una aplicación que utiliza un control de versiones en el siguiente formato: major.minor.buildcount. Por lo tanto, actualmente la aplicación es alrededor de 2.1.52, donde estamos en la versión 2.1 y ha habido 35 compilaciones.Preguntar al usuario por yes | no input

Ahora estoy agregando un objetivo ant para preguntar al usuario si desea avanzar la versión principal y/o la versión secundaria.

Cuando ejecuto mi objetivo desde la línea de comandos me gustaría seguir el siguiente:

@@ ant version 
Versioning application... 
Would you like to advance the major version to 3? (Y|n) 
@@ n 
Not Advancing major version 
Would you like to advance the minor version to 2? (y|N) 
@@ y 
Advancing minor version 

Las líneas precedidas por @@ es la entrada del usuario que quisiera tomar. Mis versiones principales y secundarias se almacenan en un archivo build.properties.

Aquí está mi código hasta ahora

<?xml version="1.0"?> 
<project name="StudentMS" default="zip" basedir="."> 
    <propertyfile file="./.ant/build.properties"> 
     <entry key="version.buildnumber" type="int" default="0" operation="+" pattern="00" /> 
    </propertyfile> 

    <property file="./.ant/build.properties" /> 
    <property name="sourceDir" location="/Users/dave/Workspace/ColdFusion/StudentMs" /> 
    <property name="buildDir" location="${sourceDir}/builds" /> 

    <target name="version" description="Adds a major and minor version to the build."> 
     <input message="Advance major version? ${version.major}" addproperty="updatemajor" validargs="y,n" defaultvalue="n" /> 
     <propertyfile file="./.ant/build.properties"> 
      <entry key="version.major" type="int" default="0" operation="+" pattern="00" /> 
     </propertyfile> 

     <input message="Advance minor version? ${version.minor}" addproperty="updateminor" validargs="y,n" defaultvalue="y" /> 
     <propertyfile file="./.ant/build.properties"> 
      <entry key="version.minor" type="int" default="0" operation="+" pattern="00" /> 
     </propertyfile> 
    </target> 
</project> 

Y mis build.properties

#Tue, 29 Mar 2011 11:46:30 -0400 
version.buildnumber=35 
version.major=2 
version.minor=1 

todavía soy muy nuevo a Ant así que siento que no puedo publicar un código más avanzado. Entonces, lo primero que tengo que hacer es agregar algún tipo de condición con respecto a las ediciones de mi archivo de propiedades.

+1

Proporcione más detalles sobre "tipo de condicional". Tal vez AntForms (http://antforms.sourceforge.net/) es lo que buscas, interacción basada en formularios en scripts de hormiga con algún tipo de lógica, por ej. parámetro requerido y opcional, si y a menos que existan las condiciones para que el widget exista ... etc. ¡Recomendado para interacción basada en formularios con hormiga! – Rebse

+0

Básicamente, si el usuario responde que sí (y), actualice el archivo de propiedad; de lo contrario, no haga nada. Realmente prefiero no usar Antforms porque eso me quita la capacidad de hacer mi compilación desde la línea de comandos, que es importante en este proyecto. –

+0

Ant Flaka (http://code.google.com/p/flaka/) es un nuevo complemento Ant que proporciona un lenguaje de expresión innovador. Además de eso, Flaka proporciona estructuras de control condicional y repetitivo como when, unless, while, for, choose, switch ...Por lo tanto, para sus requisitos condicionales puede usar = su anidado tareas ... para otro caso, use la flaka elija | cuando | de lo contrario construya Para más detalles, consulte la documentación completa de Flaka = http://flaka.googlecode.com/files/flaka.pdf – Rebse

Respuesta

7

Lo que desea se puede lograr combinando la tarea de condición y anticolisión y agregando un par de objetivos adicionales.

Creo que algo como esto debería funcionar:

<property file="./.ant/build.properties" /> 
<property name="sourceDir" location="/Users/dave/Workspace/ColdFusion/StudentMs" /> 
<property name="buildDir" location="${sourceDir}/builds" /> 

<target name="version" description="Adds a major and minor version to the build."> 
    <input message="Advance major version? ${version.major}" addproperty="updatemajor" validargs="y,n" defaultvalue="n" /> 

    <condition property="executeMajor"> 
     <and> 
      <isset property="updatemajor" /> 
      <equals arg1="${updatemajor}" arg2="y" /> 
     </and> 
    </condition> 

    <antcall target="update_major" /> 

    <input message="Advance minor version? ${version.minor}" addproperty="updateminor" validargs="y,n" defaultvalue="y" /> 

    <condition property="executeMinor"> 
     <and> 
      <isset property="updateminor" /> 
      <equals arg1="${updateminor}" arg2="y" /> 
     </and> 
    </condition> 

    <antcall target="update_minor" /> 

</target> 

<target name="update_major" if="executeMajor"> 
    <!-- Code to update major here --> 
</target> 

<target name="update_minor" if="executeMinor"> 
    <!-- Code to update minor here --> 
</target> 

Básicamente, lo que hace es establecer las propiedades executeMajor y executeMinor solo en el caso de que el updatemajor/updateminor están configurados en "y". Entonces, ant ejecutará los objetivos de actualización solo si se establecen las variables executeMajor/Minor, y de lo contrario se saltará.

+0

Puede consultar las diferentes tareas usadas en: [Condition] (http://ant.apache.org/manual/Tasks/condition.html) [AntCall] (http://ant.apache.org/manual/Tasks) /antcall.html) – jbalsas

0

Una alternativa sería compatible con la entrada del usuario y una versión desatendida.

Puede definir las propiedades de hormiga en la línea de comando. Por lo tanto, cuando se desea avanzar en una versión, se podría hacer algo como esto:

 ant -Dbuild.version.advanceMinor=true 

Este enfoque también permitirá evitar los pasos adicionales en la mayoría de las construcciones.

+0

Pero eso no Soluciono mi problema de tener que hacer un condicional. Todavía necesitaría decir en mi archivo de compilación 'if advanceMinor == true hacer esto; de lo contrario, no lo hagas ", que es lo que no sé cómo hacer. –

+0

¡Oh! Puede agregar un atributo "if" a los destinos, haciendo que ocurran solo si se define una propiedad. Ver http://ant.apache.org/manual/targets.html#targets. Además, hay una tarea de "condición" que puede establecer una propiedad en función de los operadores lógicos y las condiciones; consulte http://ant.apache.org/manual/Tasks/condition.html. –

Cuestiones relacionadas