简而言之:如何确保在标记的参数检查它之前创建我的构建目录?我正在使用蚂蚁 1.9.2。jarfile
<manifestclasspath>
build
这是一个最小的示例,除非我提前创建目录,否则它将失败:
<path id="master-classpath">
<pathelement path="src"/>
<pathelement location="lib/dom4j-1.6.1.jar"/>
</path>
<manifestclasspath property="lib.list" jarfile="build/jar/HelloWorld.jar">
<classpath refid="master-classpath" />
</manifestclasspath>
<target name="clean">
<delete dir="build"/>
</target>
<target name="build">
<mkdir dir="build/classes"/>
<javac destdir="build/classes" includeantruntime="false" >
<src path="src"/>
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="jar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="HelloWorld"/>
<attribute name="Class-Path" value="${lib.list}"/>
</manifest>
</jar>
</target>
<target name="run">
<java jar="build/jar/HelloWorld.jar" fork="true"/>
</target>
我的 jar 文件的目录当然是我的构建目录。而且我的构建目录在我构建之前不存在。构建目录的每个子目录都是由适当的目标创建的——compile
调用目录,创建目录。我认为这都是非常标准的。mkdir
classes
jar
jar
现在事情是这样的:<manifestclasspath>
标签在任何任务之前被读取,因为它加载到一个变量中。所以其他目标还没有运行。而且由于缺少目录,因此目标永远不会运行——我必须build/jar
在运行 ant 之前手动创建目录,这非常愚蠢。
当然,build
提前创建目录也没什么大不了的。但是,如果人们尝试自己安装我的软件,那肯定会更难一些。无论如何,在您构建它之前,构建永远不会存在!我应该做什么?