2011-03-31 52 views
2

獲取當前目錄這不完全容易的,我總結這個...我在磁盤上這樣的結構:南特:無法從.INCLUDE

[DIR]項目

  • [DIR] FOO
    • [文件] foo.build
  • [目錄]欄
    • [文件] bar.build
  • [文件] default.include

文件default.include包含了兩個其是在生成過程中使用的目錄屬性。例如: property name =「build.dir」value =「$ {directory :: get-current-directory}」。

的default.include文件包含由foo.build和bar.build使用其相對路徑: 包括構建文件= 「.. \ default.include」

現在的問題:當我運行foo.build從project \ foo dir中,我得到了build.dir的錯誤值。我需要「項目」,而不是「項目\富」。有沒有辦法獲得.include文件存在的目錄?

我可以使用批處理文件中做到這一點%〜DP0

回答

1

您可以使用此

<property name="build.dir" value="${project::get-base-directory()}"> 

指定項目的基本目錄,並確保你設定構建輸出路徑是build.dir

+0

謝謝你的回覆。你說我應該定義項目富: '' 我不能這樣做,這個basedir總是「。」。 (我需要參考foo目錄中的其他目錄...)必須有另一種方法。 – Suiden 2011-03-31 21:19:55

0

您可以將構建路徑屬性設置爲包含共享包含內容之前工作文件夾和項目根目錄之間的相對差異。所以,在\項目\富\ foo.build:

<property name="build.dir" value="..\" /> 
<include buildfile="..\default.include" /> 

如果你想屆時提及的事情相對於項目的根則剛剛從build.dir構建路徑。比方說,你有一個\項目\公用\你把一些自定義生成工具什麼的文件夾,然後可以參考該文件夾爲:

<property name="utils.dir" value="${build.dir}utilities\" /> 

utils.dir將.. \公用事業\這將是您的工作文件夾(在這種情況下\ project \ foo \)的正確值。

就我個人而言,我是這樣做的 - 我在項目的根目錄下有主構建文件,它包含每個子項目的構建文件。在物理上,構建分佈在各個項目中,但從邏輯上講,它全部運行,就好像它是項目根目錄中的一個大腳本。缺點是全局屬性名稱和目標名稱可能會發生衝突,所以您需要一個命名約定來防止這種情況發生。

0

剛剛得到完全相同的問題: NAnt - how to get the directory path of the included script

在我的包括文件,我需要得到包括文件的目錄,是指相對於別的東西。 似乎NAnt包含另一個構建文件,它包含它的內容,而不改變其環境中的任何內容(directory :: get-current-directory,project :: get-buildfile-path等)。

您的情況的另一種解決方案可能是使用<nant>任務而不是<include>。顯然,如果你不需要從包含的腳本返回任何東西並且只想運行它,它就可以工作。