gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:43:37 25 4
gpt4 key购买 nike

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

例如,类似下面的伪目标:

<target name="initPath">
Path = "${basedir}/../../myProject/Project/"
</target>

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

我该怎么做?

最佳答案

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 的内容。手册中有一个半体面的介绍,可能有助于为您澄清一些问题。

关于java - 我可以在 Ant 脚本中声明和初始化变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com