2009-01-14 119 views
4

我目前正在與一些喜歡設置定義環境特定變量而非使用屬性文件的Ant任務的開發人員合作。他們似乎更喜歡這樣做,因爲它更容易輸入:通過「屬性任務」使用Ant屬性文件的原因

ant <environment task> dist 

比它是類型:

ant -propertyfile <environment property file> dist 

因此,例如:

<project name="whatever" default="dist"> 

<target name="local"> 
    <property name="webXml" value="WebContent/WEB-INF/web-local.xml"/> 
</target> 

<target name="remote"> 
    <property name="webXml" value="WebContent/WEB-INF/web-remote.xml"/> 
</target> 

<target name="build"> 
    <!-- build tasks here ---> 
</target> 

<target name="dist" depends="build"> 
    <war destfile="/dist/foo.war" webxml="${webXml}"> 
     <!-- rest of war tasks here --> 
    </war> 
</target> 

我發現很難說服他們,屬性文件是他們正確的路要走。我相信,屬性文件是更好,因爲:

  • 他們提供了更大的靈活性 - 如果你需要一個新的環境,只需要添加一個新的屬性文件
  • 它更清晰這是怎麼回事 - 你必須瞭解這一點「把戲」以實現他們正在完成的任務
  • 不提供默認值和使用覆蓋的功能 - 如果他們使用屬性文件,他們可以在項目頂部提供默認值,但可以用文件覆蓋它們
  • 如果在命令行上未提供環境任務,腳本不會中斷

當然,他們所聽到的是他們需要更改他們的Ant腳本,並且必須在命令行上輸入更多內容。

你可以通過「屬性任務」提供任何有利於屬性文件的其他參數嗎?

回答

15

屬性任務將構建文件與環境緊密結合。如果你的開發人員爭辯說他們「必須改變他們的螞蟻腳本」,那麼他們爲什麼不爭論在每次部署到新環境時都要改變它? :)

也許你可以說服他們允許屬性文件和命令行配置。我設置了我的Ant構建,以便如果build.properties與build.xml存在於相同的目錄中,它會將其讀入。否則,它會使用一組硬編碼的默認屬性。這非常靈活。

<project name="example"> 

    <property file="build.properties"/> 

    <property name="foo.property" value="foo"/> 
    <property name="bar.property" value="bar"/> 

    ... 
</project> 

我沒有提供項目的build.properties(即build.properties沒有在SCM中進行版本控制)。這樣開發人員不會被迫使用屬性文件。我確實提供了一個開發人員可以參考的build.properties.example文件。

由於Ant屬性,一旦設置,是不可變的,構建文件將使用以該順序定義的屬性:通過命令行設置有-D-propertyfile

  • 屬性從生成加載
  • 屬性.properties
  • 構建中的默認屬性。這種方法的XML

優點:

  • 構建文件更小,因此更易於維護,更少的錯誤傾向
  • 開發者,只是不能在命令行從設置屬性脫身仍然可以使用它們。
  • 屬性文件可以使用,但不是必需的
3

你已經是相當有吸引力的參數。如果這些論點沒有奏效,那麼爭論就不會解決問題。其實沒有什麼就是要解決這個問題。不要以爲人們是理性的,會做最實際的事情。他們的自我介入。

停止爭論。即使你贏了,你所創造的怨恨和煩惱也不值得。贏得爭論可能比輸家更糟。

讓你的情況,然後讓它離開。有可能一段時間後,他們會決定改變方向(因爲它實際上更好)。如果發生這種情況,他們會表現得像他們自己的想法。將不會提到你提出了它。

另一方面,他們可能永遠不會切換。

唯一的解決方案是朝着一個權威的位置努力,在那裏你可以說如何做。

+0

所以。詛咒。真正。 – sjas 2013-02-25 13:24:13

0

第一個解決方案(使用ant屬性)的問題基本上是硬編碼。 當你爲自己開始一個項目時,它可能很方便,但很快你必須消除這種壞習慣。

我正在使用屬性文件接近什麼說robhruska,但我已直接提交build.properties文件。這種方式你有一個默認的。

另一方面,我知道我可以在build.xml中添加這些默認值。 (我可能會在接下來的幾小時/幾天內嘗試;-))。

不管怎樣,我真的不喜歡第一種方法,我將迫使那些傢伙跟隨第二個...