缺点是:如何在<{em> jarfile
标记的<manifestclasspath>
参数检查之前确保我的构建目录是否已创建?我正在使用ant 1.9.2。
这是一个最小的例子,除非我提前创建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>
<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
标签在任何任务之前被读入,因为它加载了一个变量。所以其他目标还没有运行。并且由于缺少目录,目标从不运行 - 我必须在运行ant之前手动创建<manifestclasspath>
目录,这非常愚蠢。
当然,提前创建build/jar
目录没什么大不了的。但如果人们试图自己安装我的软件,那肯定会让它变得更难。无论如何,在构建之前,构建永远不会存在!我应该做什么?
答案 0 :(得分:1)