我可以在Ant脚本中声明和初始化变量吗?

And*_*ili 4 java ant

在Ant中,我可以创建一个包含类似路径的变量的目标吗?

例如,类似于以下伪目标:

<target name="initPath">
    Path = "${basedir}/../../myProject/Project/"
</target>
Run Code Online (Sandbox Code Playgroud)

其中Path是我的变量,并初始化为特定值.

我怎样才能做到这一点?

Dav*_* W. 8

Ant构建脚本是用XML编写的.要创建属性必须是XML样式,所以不要这样:

some_prop="some value"
Run Code Online (Sandbox Code Playgroud)

就是这个:

<property name="some_prop"  value="some value"/>
Run Code Online (Sandbox Code Playgroud)

属性可以包含句点,我建议将它们用作名称分隔符:

<property name="some.prop"  value="some value"/>
Run Code Online (Sandbox Code Playgroud)

你怎么声明一个常数?这里:

<property name="some.prop"  value="some value"/>
Run Code Online (Sandbox Code Playgroud)

那是因为一旦设置了属性,它就无法更改.

这样,你可以这样做:

<property file="${basedir}/build.properties"/>
<property name="some.prop" value="some value"/>
Run Code Online (Sandbox Code Playgroud)

假设该build.properties文件包含以下行:

some.prop="Some other value"/>
Run Code Online (Sandbox Code Playgroud)

现在,当您运行Ant构建文件时,其值some.prop将为"其他值",并且<property name="some.prop" value="some value"/>不会更改它.我甚至可以这样做:

$ ant -Dsome.prop="A completely different value"
Run Code Online (Sandbox Code Playgroud)

并且该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>
Run Code Online (Sandbox Code Playgroud)

默认情况下,当我的copy任务运行时,它以非详细模式运行,这就是我想要的.但是,假设我的构建存在一些问题,我想确切地看到正在复制的内容,我可以这样做:

$ ant -Dcopy.verbose=true
Run Code Online (Sandbox Code Playgroud)

而且,现在我的复制任务将显示所有正在复制的文件.


一个路径是宣布类似的方式$CLASSPATH或者$PATH在命令行.您可以使用id 预先声明路径,然后再使用它:

<javac destdir="${main.destdir}"
    srcdir="${main.srcdir}">
    <classpath>
        <fileset dir="${lib.dir}">
            <include name="*.jar"/>
        </fileset>
    </classpath>
</javac>
Run Code Online (Sandbox Code Playgroud)

这里我添加了一个类路径.这<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"/>
Run Code Online (Sandbox Code Playgroud)

在这里,我预先声明了我main.classpath,然后在我的<javac>任务中使用它.

您应该在在线Ant手册中阅读Ant.手册中有一个不太好的介绍,可能有助于为您澄清一些问题.


Iva*_*tyk 1

以下是如何在 Ant 脚本中定义属性。

不幸的是它不是一个变量,因为它们是不可变的。您可以为其设置一个值,但在脚本执行期间无法更改它。

在这里您可以看到为属性赋值的示例。

更新。您可以使用路径任务。例如:

    <path id="combinedPath">
        <path path="${toString:oldPath}"/>
        <path path="my.jar"/>
    </path>

    <path id="reanamePath">
        <path path="${toString:oldPath}"/>
    </path>
Run Code Online (Sandbox Code Playgroud)

如果您更改一个目标中的路径,您绝对可以在另一目标中访问它。