You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建可执行Jar时如何删除其BOOT-INF/lib目录下的指定文件

问题原因

  • Ant 原生的 <delete> 标签仅支持操作本地文件系统的普通文件/目录,无法直接读取、修改zip/jar这类压缩包内部的路径。
  • 第一个配置能生效,是因为 ${project.basedir}/target/classes/xyz.jar/ 并非已打包完成的压缩包,而是Spring Boot可执行Jar构建过程中生成的临时解压目录,该路径属于普通文件系统结构,因此可以直接删除内部文件。
  • 第二个配置指向的 ${project.basedir}/target/lib/xyz.jar 是已经构建完成的压缩包,系统不存在 xyz.jar/abc.whl 这类实体文件路径,因此删除操作不生效。

正确实现方案

方案1(推荐):在打包压缩前执行删除

调整maven-antrun-plugin的执行阶段为prepare-package(该阶段在最终Jar包压缩生成前执行),直接对Spring Boot生成的临时展开目录执行删除,后续打包会自动把删除后的结构压入最终Jar包,配置示例:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>3.1.0</version>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <tasks>
          <!-- 直接操作临时展开目录内的文件,按实际需要调整路径 -->
          <delete file="${project.build.directory}/classes/BOOT-INF/lib/abc.whl" />
        </tasks>
      </configuration>
    </execution>
  </executions>
</plugin>

方案2:操作已打包完成的Jar包

如果必须修改已生成的Jar包,需要先解压、删除目标文件后重新打包,配置示例:

<tasks>
  <!-- 1. 解压目标Jar到临时目录 -->
  <unzip src="${project.basedir}/target/lib/xyz.jar" dest="${project.build.directory}/temp-jar" />
  <!-- 2. 删除临时目录内的指定文件 -->
  <delete file="${project.build.directory}/temp-jar/BOOT-INF/lib/abc.whl" />
  <!-- 3. 重新打包为Jar -->
  <zip destfile="${project.basedir}/target/lib/xyz.jar" basedir="${project.build.directory}/temp-jar" />
  <!-- 4. 清理临时目录 -->
  <delete dir="${project.build.directory}/temp-jar" />
</tasks>

内容的提问来源于stack exchange,提问作者Jijo Antony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:39:03