2010-09-17 70 views
2

比方說,我有一個文件系統,看起來有點像這樣:螞蟻:文件集「目錄」與運行時屬性擴展全路徑

  • C:\東西\ build.xml文件
  • Ç :\東西\ MyFolder文件\ library1.jar
  • C:\東西\ MyFolder文件\ library2.jar

裏面的build.xml,我想定義看起來像這樣的路徑:

<path id="some.id"> 
    <fileset dir="myfolder"> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 

通常,工作正常。但是,我打電話給自己的自定義Ant任務,該任務將繼承任何引用(包括路徑「some.id」),並且該自定義Ant任務將調用駐留在不同basedir中的build.xml。因此,文件集中的「dir」屬性不再有效。

有沒有辦法定義一個「目錄」,使它保持有效,無論第二個build.xml居住在哪裏?

我基本上想要做這樣的事情:

<fileset dir="${expand.current.directory}/myfolder"> 

所以,當我打電話第二build.xml文件將體會到了「目錄」屬性的位置:

<fileset dir="c:\stuff\myfolder"> 

編輯:此外,我想要一個解決方案,允許我將「stuff」項目從一臺機器複製到另一臺機器,而無需更改構建。例如,如果「stuff」項目位於C:驅動器上,並將項目複製到另一臺計算機上的D:驅動器上,我希望構建繼續工作,而不必進入構建並更改該信件C到字母D.

回答

3

我想你是在${user.dir}屬性之後 - 這是當前的工作目錄。

所有java System.properties都可用作螞蟻屬性。

1

選項1: 您可以定義Ant屬性。

在文件的beggining你可以定義此屬性:

<property name="myproject.root.path" location="C:/stuff/"/> 

,然後使用它:

<fileset dir="${myproject.root.path}/myfolder"> 

選項2: 您也可以在外部定義它build.properties文件,位於build.xml文件所在的同一文件夾中。

文件C:\東西\ build.properties

myproject.root.path=C:/stuff/ 

而且,要利用這個文件,你必須在Ant的XML文件中加入這一行的(任務定義之前,建議):

<property file="build.properties"/> 

一旦你已經包括這個文件,你可以使用屬性沿項目,以同樣的方式作爲選項1可以看出:

<fileset dir="${myproject.root.path}/myfolder"> 

您可以添加多個屬性文件。

請注意,路徑使用斜線定義,而不是反斜線。

+0

對不起,我可能應該澄清我的問題,我想確保解決方案實際上是獨立於機器。如果我要將「stuff」項目複製到具有D:驅動器的計算機上,那麼在不更新ant/properties文件的情況下,上述解決方案將無法工作。道歉忘記添加,在我原來的職位。 – digiarnie 2010-09-17 10:55:15

+0

這是將其解壓縮到屬性文件的一個很好的理由,您可以在其中更改環境相關值而無需重寫您的build.xml文件。 – 2010-09-20 07:35:22

+0

其他選項可以是martin clayton在另一個答案中所說的,訪問java運行時屬性(如$ {user.dir})。 – 2010-09-20 07:37:01