覆盖ANT属性文件



如何用新创建的属性文件覆盖某些现有属性?

以下是所需的结构:

initially load Master.properties
generate new.properties

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

这个想法是Master.properties生成一些产品版本,应该用new.properties替换。然而,Master.properties中的其他属性应该保持不变。

阅读这篇文章没有帮助,因为我不知道如何加载新的.properties文件

编辑这里是ANT脚本:

<project name="nightly_build" default="main" basedir="C:WorkNightlyBuild">
    <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:NightlyBuildNightlyBuild" tofile="C:NightlyBuildNightlyBuild.${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">将运行Master.xml ANT脚本。此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>

您应该能够通过查看加载(或以其他方式指定)属性值的顺序来解决此问题。您可能根本不需要覆盖属性值,这是核心Ant不支持的。

也许您可以将Master.properties拆分为两个文件——一个在生成新的.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任务的文档。

如果您仍然存在在加载new.properties之前已经定义了Product_Version的问题,那么我想说,获取生成new.properties的脚本,以输出具有不同名称的版本,例如New_Product_Version。然后调用你的主构建像这样的东西:

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

也许这是个老问题。希望OP正在阅读这篇文章。

你可以使用蚂蚁任务"属性文件"。参考

它可以从文件中读取属性,并将更新后的值写回这些属性。

相关内容

  • 没有找到相关文章

最新更新