如何在Ant中使用jar命令更新JAR包?报错找不到文件目录
Ant更新JAR包的Target错误修复
问题描述
需要通过Ant执行jar -uf sample.jar [jar内路径] 目标文件命令更新JAR包,编写的Ant Target如下:
<target name="UpdateJar" depends="Compile"> <exec executable="java path"> <arg value="-uf"/> <arg value="$Sample.jar"/> <arg value="${Path}"/> <arg value="Test.class"/> </exec> </target>
运行后报错,错误信息:
(path is : X:\Jar\test ): [exec] X:\Jar\test no such file or directory [exec] Result: 1
错误分析与修复
你的Target存在几个关键问题,修正如下:
- exec命令指定错误:要执行的是
jar工具,不是java path,直接写jar即可(需确保JDK的bin目录在系统环境变量中,否则写完整路径如C:\Program Files\Java\jdk1.8.0_301\bin\jar.exe)。 - 变量引用格式错误:Ant中变量引用需用
${变量名},$Sample.jar要改成${Sample.jar}。 - 参数传递逻辑错误:
jar -uf的正确格式是jar -uf 目标jar包 jar内完整路径/文件名 本地文件路径,需把jar内路径和文件名拼接成一个参数传递。
修正后的Target示例:
<target name="UpdateJar" depends="Compile"> <exec executable="jar"> <arg value="-uf"/> <arg value="${Sample.jar}"/> <!-- 拼接jar内的完整目标路径 --> <arg value="${Path}/Test.class"/> <!-- 本地Test.class的路径,若不在当前目录需写完整路径 --> <arg value="Test.class"/> </exec> </target>
额外注意事项:
- 确认
${Sample.jar}指向的JAR文件真实存在,路径无误。 - 确保本地
Test.class文件存在,若Ant执行的工作目录不是该文件所在目录,需替换为完整路径(比如${basedir}/build/classes/Test.class)。 - 若
${Path}本身包含特殊字符或空格,可给参数加上quoted="true"属性避免解析错误。
内容的提问来源于stack exchange,提问作者panda
相关产品推荐
相关产品推荐

