2010-09-17 68 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