перезаписывать файл свойств ANT - PullRequest
1 голос
/ 08 июня 2011

Как мне перезаписать существующее свойство вновь созданным файлом свойств?

Вот необходимая структура:

initially load Master.properties
generate new.properties


load new.properties and master.properties
run master.xml (ANT script)

Идея состоит в том, что Master.properties генерирует некоторую версию продукта, котораядолжны быть заменены на new.properties.Однако другие свойства в Master.properties должны оставаться неизменными.

Чтение this не помогает, так как я не знаю, как я могу загрузить файл new.properties

EDIT Вот скрипт ANT:

<project name="nightly_build" default="main" basedir="C:\Work\NightlyBuild">
    <target name="init1">
        <sequential>
                    <property file="C:/Work/NightlyBuild/master.properties"/>
            <exec executable="C:/Work/Searchlatestversion.exe">
                <arg line='"/SASE Lab Tools" "${Product_Tip}/RELEASE_"'/>
            </exec>
            <sleep seconds="10"/>
            <property file="C:/Work/new.properties"/>

        </sequential>
    </target>
    <target name="init" depends="init1">
        <sequential>
            <echo message="The product version is ${Product_Version}"/>
            <exec executable="C:/Work/checksnapshot.exe">
                <arg line='-NightlyBuild ${Product_Version}-AppsMerge' />
            </exec> 
            <sleep seconds="10"/>
            <property file="C:/Work/checksnapshot.properties"/>
            <tstamp>
                <format property="suffix" pattern="yyyy-MM-dd.HHmm"/>
            </tstamp>
        </sequential>
    </target>
    <target name="main" depends="init">
            <echo message="loading properties files.." />
            <echo message="Backing up folder" />
            <move file="C:\NightlyBuild\NightlyBuild" tofile="C:\NightlyBuild\NightlyBuild.${suffix}" failonerror="false" />
                <exec executable="C:/Work/sortfolder.exe">
                    <arg line="6" />
                </exec>
                <exec executable="C:/Work/NightlyBuild/antc.bat">
                </exec> 
    </target>
</project>

в приведенном выше скрипте, <exec executable="C:/Work/NightlyBuild/antc.bat"> запустит скрипт ANT Master.xml.Этот Master.xml будет загружен Master.properties:

<project name="Master ANT Build" default="main" >               
    <taskdef name="CFileEdit" classname="com.ANT_Tasks.CFileEdit"/>
    <!-- ========================================================== -->
    <!-- init: sets global properties                               -->
    <!-- ========================================================== -->
    <target name="init">
        <property environment="env"/>
        <!-- ========================================================== -->
        <!-- Set the timestamp format                   -->
        <!-- ========================================================== -->
        <property file="Master.properties"/>
         ...
</project>

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Вы сможете решить эту проблему, посмотрев порядок, в котором вы загружаете (или иным образом указываете) значения своих свойств. Возможно, вам вообще не нужно переопределять значения свойств, что не поддерживается ядром Ant.

Может быть, вы можете разделить ваши Master.properties на два файла - один загружается до того, как вы сгенерируете new.properties, а другой - после?

Может быть, вам вообще не нужно генерировать new.properties.

Не могли бы вы дать более подробную информацию о том, что вам нужно сделать?

Поскольку вы в конечном итоге разветвляете новый процесс Ant (exec antc.bat), разве это не запускает новую среду в любом случае? Если он просто загружает Master.properties, это будут единственные свойства, которые у него будут.

Не уверен, что делает ваш antc.bat, но довольно необычно выполнить Ant из Ant таким способом. Есть две стандартные задачи, которые могут быть полезны - Ant и AntCall .

ОК, продолжаем из ваших последующих комментариев ...

Допустим, вместо того, чтобы делать это:

<exec executable="antc.bat">

вы вместо этого сделали что-то вроде этого:

<ant file="Master.xml" inheritall="false">
   <property name="Product_Version" value="${Product_Version}"/>
</ant>

Я думаю, это приближается к тому, что вы хотите. Вы избирательно передаете определенные значения, полученные при загрузке new.properties. См. Документацию для задачи Ant .

Если у вас все еще есть проблема, которую вы уже определили Product_Version перед загрузкой new.properties, то я бы сказал, что у вас есть скрипт, который создает new.properties для вывода версии с другим именем, например, New_Product_Version. Затем вызовите вашу мастер-сборку примерно так:

<ant file="Master.xml" inheritall="false">
   <property name="Product_Version" value="${New_Product_Version}"/>
</ant>
1 голос
/ 22 июня 2012

Может быть, это старый вопрос.Надеюсь, что ОП читает это.

Вы можете просто использовать задачу муравья "propertyfile". ссылка

может считывать свойства из файла и записывать в них обновленные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...