0

简而言之:如何确保在标记的参数检查它之前创建我的构建目录?我正在使用蚂蚁 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调用目录,创建目录。我认为这都是非常标准的。mkdirclassesjarjar

现在事情是这样的:<manifestclasspath>标签在任何任务之前被读取,因为它加载到一个变量中。所以其他目标还没有运行。而且由于缺少目录,因此目标永远不会运行——我必须build/jar在运行 ant 之前手动创建目录,这非常愚蠢。

当然,build提前创建目录也没什么大不了的。但是,如果人们尝试自己安装我的软件,那肯定会更难一些。无论如何,在您构建它之前,构建永远不会存在!我应该做什么?

4

1 回答 1

1

尝试在创建 jar 文件的目标中使用 manifestclasspath 任务。

请参见以下示例:

于 2013-10-03T22:33:35.737 回答