Запрашивать у пользователя да|нет ввода

Я работаю над процессом сборки Ant для приложения, использующего управление версиями в следующем формате: major.minor.buildcount. Итак, в настоящее время приложение имеет версию 2.1.52, где мы используем версию 2.1, и было создано 35 сборок.

Теперь я добавляю цель муравья, чтобы спросить пользователя, хотят ли они продвинуть основную версию и/или второстепенную версию.

Когда я запускаю свою цель из командной строки, я хотел бы выполнить следующее:

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

Строки, начинающиеся с @@, — это пользовательский ввод, который я хотел бы принять. Мои основные и дополнительные версии хранятся в файле build.properties.

Вот мой код до сих пор

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

И мои build.properties

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

Я все еще новичок в Ant, поэтому мне жаль, что я не могу опубликовать более сложный код. Итак, первое, что мне нужно сделать, это добавить какое-то условие вокруг моих правок в файле свойств.


person Dave Long    schedule 29.03.2011    source источник
comment
Пожалуйста, предоставьте более подробную информацию о виде условного выражения. Возможно, AntForms (antforms.sourceforge.net) — это то, что вам нужно, взаимодействие на основе форм в ant-скриптах с некоторыми какая-то логика, фу параметр обязательный и необязательный, если и если условия для существования виджета .. и т. д. Рекомендуется для взаимодействия с ant на основе формы !   -  person Rebse    schedule 29.03.2011
comment
В основном, если пользователь отвечает «да» (y), обновите файл свойств, иначе ничего не делайте. Я действительно предпочитаю не использовать Antforms, потому что это лишает меня возможности выполнять сборку из командной строки, что важно в этом проекте.   -  person Dave Long    schedule 30.03.2011
comment
Ant Flaka (code.google.com/p/flaka) — это новый подключаемый модуль Ant, предоставляет инновационный язык выражений. Кроме того, Flaka предоставляет условные и повторяющиеся структуры управления, такие как когда, если, пока, для, выбирать, переключать.. Таким образом, для ваших условных требований вы можете использовать = ‹project xmlns:fl=antlib:it.haefelinger.flaka› ‹fl: when test= '${updatemajor}' eq 'y' › ваши вложенные задачи .. ‹/fl:when› для if|else вы используете конструкцию flaka Choose|when|иначе Дополнительные сведения см. в подробной документации Flaka = flaka.googlecode.com/files/flaka.pdf   -  person Rebse    schedule 30.03.2011


Ответы (2)


то, что вы хотите, может быть достигнуто путем объединения задачи условия и antcall и добавления пары дополнительных целей.

Я думаю, что-то вроде этого должно работать:

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

Basically, what it does is set the executeMajor and executeMinor properties just in the case that the updatemajor/updateminor are set to "y". Then, ant will run the update targets just if the executeMajor/Minor variables are set, and it will skip them otherwise.

person jbalsas    schedule 29.03.2011
comment
Вы можете проверить различные используемые задачи ant в: Условие AntCall - person jbalsas; 30.03.2011

В качестве альтернативы можно было бы поддерживать как пользовательский ввод, так и автоматическую сборку.

Вы можете определить свойства муравья в командной строке. Итак, когда вы хотите продвинуть версию, вы можете сделать что-то вроде этого:

      ant -Dbuild.version.advanceMinor=true

Этот подход также позволит вам избежать дополнительных шагов в большинстве сборок.

person Andy Thomas    schedule 29.03.2011
comment
Но это не решает моего вопроса о необходимости делать условное выражение. Мне все равно в моем файле сборки нужно сказать if advanceMinor == true do this; else don't do it, что я не знаю, как это сделать. - person Dave Long; 30.03.2011
comment
Ой! Вы можете добавить атрибут if к целям, чтобы они возникали только в том случае, если определено свойство. См. ant.apache.org/manual/targets.html#targets . Кроме того, существует задача условия, которая может устанавливать свойство на основе логических операторов и условий — см. ant.apache.org/manual/Tasks/condition.html . - person Andy Thomas; 30.03.2011