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>