简而言之:如何确保我的构建目录在 jarfile
之前创建。 <manifestclasspath>
的参数标签检查吗?我使用的是ant 1.9.2。
这是一个最小的示例,除非我创建 build
,否则它将失败提前目录:
<pre><code> <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>
</code></pre>
我的 jar 文件的目录当然是我的构建目录。而且我的构建目录在构建之前并不存在。构建目录的每个子目录都是由适当的目标创建的 - compile
来电 mkdir
关于classes
目录,jar
创建jar
目录。我认为这都是相当标准的。
现在事情是这样的:<manifestclasspath>
标签在任何任务之前被读取,因为它加载到变量中。所以其他目标还没有运行。由于缺少目录,目标永远不会运行 - 我必须手动创建 build/jar
运行 ant 之前的目录,这是非常愚蠢的。
当然,创建 build
没什么大不了的。提前目录。但如果人们试图自己安装我的软件,这肯定会让事情变得有点困难。不管怎样,在你构建它之前,构建永远不会存在!我应该做什么?
最佳答案
关于java - Apache ant manifestclasspath -- 如何防止 jarfile 目录出现 catch-22?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169950/