2011-06-08 222 views
1

如何使用新創建的屬性文件覆蓋某些現有屬性?覆蓋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中的其他屬性應保持不變。

閱讀this沒有幫助,因爲我不知道我怎樣才能加載new.properties文件

編輯這裏是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">將運行碩士。 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> 

回答

2

您應該能夠通過查看您加載(或規定)的屬性值,以解決此問題。您可能根本不需要重寫屬性值,這是核心Ant不支持的。

也許你可以分割你的Master.properties成兩個文件 - 一個你生成new.properties前裝和後一個裝?

也許你根本不需要生成new.properties。

你能否提供一些你需要做的更多細節?

因爲你最終派生新的Ant過程(EXEC antc.bat),這是否不反正啓動一個新的環境?如果它只是加載Master.properties,那麼它將是唯一的屬性。

不知道你antc.bat做什麼,但它是非常不尋常以這種方式從螞蟻螞蟻exec的。有兩個標準任務可能有用 - AntAntCall

確定從後來的評論上運行...

比方說,而不是做這樣的:

<exec executable="antc.bat"> 

你,而不是做了這樣的事情:

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

我認爲,正在朝着你想要的方向發展。您有選擇地傳遞您通過加載new.properties獲得的特定值。請參閱Ant task的文檔。

如果您在加載new.properties之前仍然存在定義了Product_Version的問題,那麼我會說讓您的腳本生成new.properties以輸出具有不同名稱的版本,例如New_Product_Version。然後調用你的主構建是這樣的:

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

請參閱我的編輯以獲得更好的理解。作爲要求的一部分,我無法分割這個Master.properties – jeremychan 2011-06-08 09:11:20

+0

爲什麼你需要加載目標init1中的Master.properties?爲什麼你需要在new.properties之前加載它? – sudocode 2011-06-08 09:34:33

+0

哎呀抱歉,我編輯$ {Product_Tip}應該在 – jeremychan 2011-06-08 09:40:16

1

可能這是一個老問題。希望OP在讀這個。

您可以使用ant任務「propertyfile」。 reference

它可以從文件讀取屬性並將更新後的值寫回給它們。

+0

這是此部分所說的更正確的版本: ' ant file =「Master.xml」inheritall =「false」>' 編輯:更正和世衛組織思考按ENTER鍵是提交評論的好方法! – 2012-11-20 13:44:08