假设我的文件系统看起来像这样:
在build.xml中,我想定义一个如下所示的路径:
<path id="some.id">
<fileset dir="myfolder">
<include name="**/*.jar"/>
</fileset>
</path>
通常情况下工作正常。但是,我正在调用我自己的自定义Ant任务,它将继承任何引用(包括路径“some.id”),并且自定义Ant任务将调用生活在不同基础上的build.xml。因此,文件集中的“dir”属性不再有效。
有没有办法定义“dir”,这样无论第二个build.xml在哪里都能保持有效?
我基本上想做这样的事情:
<fileset dir="${expand.current.directory}/myfolder">
因此,当我调用第二个build.xml时,它将理解“dir”属性是以下位置:
<fileset dir="c:\stuff\myfolder">
编辑:此外,我想要一个解决方案,允许我将“stuff”项目从一台机器复制到另一台机器,而无需更改构建。例如,如果“stuff”项目位于C:驱动器上,并且我将项目复制到另一台机器上的D:驱动器,我希望构建继续工作,而不必进入构建并更改字母C到字母D.
答案 0 :(得分:3)
我认为你是在${user.dir}
属性之后 - 这是当前的工作目录。
所有java System.properties都可用作ant属性。
答案 1 :(得分:1)
选项1: 您可以定义Ant属性。
在文件的初始化时,您可以定义此属性:
<property name="myproject.root.path" location="C:/stuff/"/>
然后,使用它:
<fileset dir="${myproject.root.path}/myfolder">
选项2: 您还可以在外部build.properties文件中定义它,该文件位于build.xml文件所在的同一文件夹中。
文件C:\ stuff \ build.properties
myproject.root.path=C:/stuff/
并且,要使用此文件,您必须在Ant XML文件中添加此行(在任务定义之前推荐):
<property file="build.properties"/>
包含此文件后,您可以使用项目中的属性,方法与选项1相同:
<fileset dir="${myproject.root.path}/myfolder">
您可以添加多个属性文件。
请注意,路径是使用斜杠定义的,而不是反斜杠。