java - Apache ant manifestclasspath -- 如何防止 jarfile 目录出现 catch-22?

标签 java ant classpath

简而言之:如何确保我的构建目录在 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 没什么大不了的。提前目录。但如果人们试图自己安装我的软件,这肯定会让事情变得有点困难。不管怎样,在你构建它之前,构建永远不会存在!我应该做什么?

最佳答案

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

请参阅以下示例:

关于java - Apache ant manifestclasspath -- 如何防止 jarfile 目录出现 catch-22?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169950/

相关文章:

java - 在 Java 中将参数传递给类

java - 制作一个 Android 应用程序,其中启动图标充当链接

ant - 如何抑制重复的 ant jar 警告

-classpath 选项中的 Javac 与 Java

jetty - 无法让 jettyRun 在 Gradle 中工作

java - 从 tomcat 服务器中发出 http 请求的正确方法是什么

java - 由于初始化时捕获异常,局部变量无法定义为 Final

git - Ivy 与 Git 存储库

java - Jacoco:无法读取执行数据文件,ant 任务

java - 如何从类路径运行 Liquibase changeLogFile