Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheAnt manifestclasspath——如何防止jarfile目录catch-22?_Java_Ant_Classpath - Fatal编程技术网

Java ApacheAnt manifestclasspath——如何防止jarfile目录catch-22?

Java ApacheAnt manifestclasspath——如何防止jarfile目录catch-22?,java,ant,classpath,Java,Ant,Classpath,它的缺点是:如何确保在标记的jarfile参数检查构建目录之前创建它?我正在使用Ant1.9.2 下面是一个最小的示例,除非我提前创建build目录,否则将失败: 当然,我的jar文件的目录是我的构建目录。在生成之前,我的生成目录不存在。构建目录的每个子目录都是由相应的目标--compile调用mkdir在classes目录上创建的,jar创建jar目录。我认为这都是相当标准的 现在是这样的:标记在任何任务之前都会被读入,因为它加载在一个变量中。所以其他目标还没有运行。由于目录丢失,

它的缺点是:如何确保在
标记的
jarfile
参数检查构建目录之前创建它?我正在使用Ant1.9.2

下面是一个最小的示例,除非我提前创建
build
目录,否则将失败:



当然,我的jar文件的目录是我的构建目录。在生成之前,我的生成目录不存在。构建目录的每个子目录都是由相应的目标--
compile
调用
mkdir
classes
目录上创建的,
jar
创建
jar
目录。我认为这都是相当标准的

现在是这样的:
标记在任何任务之前都会被读入,因为它加载在一个变量中。所以其他目标还没有运行。由于目录丢失,目标永远不会运行——在运行ant之前,我必须手动创建
build/jar
目录,这非常愚蠢


当然,提前创建
build
目录没什么大不了的。但如果有人试图自己安装我的软件,这肯定会让事情变得更难一些。无论如何,在你构建它之前,这个构建永远不存在!我应该做什么?

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

请参见以下示例:

 <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>