在Ant中,我可以创建一个包含类似路径的变量的目标吗?
例如,类似以下伪目标:
<target name="initPath">
Path = "${basedir}/../../myProject/Project/"
</target>
路径是我的变量,并初始化为特定值。
我该怎么做?
答案 0 :(得分:8)
Ant构建脚本是用XML编写的。要创建属性,必须采用XML样式,而不是:
some_prop="some value"
就是这样:
<property name="some_prop" value="some value"/>
属性可以包含句点,我建议将它们用作名称分隔符:
<property name="some.prop" value="some value"/>
你如何申报常数?这里:
<property name="some.prop" value="some value"/>
那是因为一旦设置了属性,就无法更改。
这样,您可以这样做:
<property file="${basedir}/build.properties"/>
<property name="some.prop" value="some value"/>
假设build.properties
文件包含以下行:
some.prop="Some other value"/>
现在,当您运行Ant构建文件时,some.prop
的值将为“其他值”,<property name="some.prop" value="some value"/>
将不会更改它。我甚至可以这样做:
$ ant -Dsome.prop="A completely different value"
some.prop
属性的这个值将覆盖我在build.properties文件中的内容以及我在Ant构建文件中的内容。
这是一个非常好的功能。它允许我设置开发人员可以覆盖的默认值:
<property name="copy.verbose" value="false"/>
...
<copy todir="${copy.to.dir}"
verbose="${copy.verbose}">
<fileset dir="${copy.from.dir}"/>
</copy>
默认情况下,当我的copy
任务运行时,它以非详细模式运行,这就是我想要的。但是,假设我的构建存在一些问题,我想确切地看到正在复制的内容,我可以这样做:
$ ant -Dcopy.verbose=true
而且,现在我的复制任务将显示所有正在复制的文件。
路径是一种在命令行中声明$CLASSPATH
或$PATH
之类的方法。您可以使用id预先声明路径,然后再使用它:
<javac destdir="${main.destdir}"
srcdir="${main.srcdir}">
<classpath>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>
这里我添加了一个类路径。这是使用<fileset/>
根据我${lib.dir}
目录中的所有jar创建一个类路径。
我也可以这样做:
<path id="main.classpath">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<javac destdir="${main.destdir}"
srcdir="${main.srcdir}"
classpathref="main.classpath"/>
在这里,我预先声明了我的main.classpath
,然后在我的<javac>
任务中使用它。
您应该在在线Ant手册中阅读Ant。手册中有一个半体面的介绍,可能有助于为您澄清一些问题。
答案 1 :(得分:0)
以下是在Ant脚本中定义property的方法。
不幸的是,它不是一个变量,因为它们是不可变的。您可以为其设置值,但在脚本执行期间无法更改它。
Here您可以看到为属性分配值的示例。
更新。 您可以使用路径task。例如:
<path id="combinedPath">
<path path="${toString:oldPath}"/>
<path path="my.jar"/>
</path>
<path id="reanamePath">
<path path="${toString:oldPath}"/>
</path>
如果你在一个目标中改变路径,你肯定可以在另一个目标中访问它。
答案 2 :(得分:0)
Ant有classpath-like support built-in。
通常,您不会使用属性来实现此功能。
请考虑阅读Ant文档;这是Ant 101,如果你花一些时间在文档上并弄清楚Ant的做事方式,那么从长远来看它会更快。