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

Quarkus构建Uber-Jar时重命名文件报错求助

Quarkus Uber-Jar构建失败:文件被占用问题处理

问题详情

构建Quarkus Uber-Jar时触发如下错误:

Failed to build quarkus application: java.nio.file.FileSystemException: C:\parent\module\target\foobartest-1.0.0-SNAPSHOT.jar -> C:\parent\module\target\foobartest-1.0.0-SNAPSHOT.jar.original: Cannot access file as it is used by another process

(注:该错误由瑞典语翻译而来)

运行环境

  • Quarkus 3.19.3
  • Java 21
  • Windows系统下的Git Bash
  • Maven

构建后target目录已生成文件:

  • foobartest-1.0.0-SNAPSHOT.jar
  • foobartest-1.0.0-SNAPSHOT-runner.jar

Uber-Jar看似已成功生成,但存在两个疑问:

  1. 构建过程为何要重命名foobartest-1.0.0-SNAPSHOT.jar为.original后缀的文件?
  2. 报错提示的文件被占用是否由构建进程自身导致?

已尝试重启Shell和电脑,确认无其他外部进程占用该文件。

临时解决方法

添加已废弃的参数skipOriginalJarRename后,构建恢复正常。修改后的POM.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>se.foo</groupId>
<artifactId>foobar</artifactId>
<version>1.0.0-SNAPSHOT</version>

<properties>
    <compiler-plugin.version>3.14.0</compiler-plugin.version>
    <maven.compiler.release>17</maven.compiler.release>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
    <quarkus.platform.version>3.19.3</quarkus.platform.version>
    <quarkus-plugin.version>3.19.3</quarkus.plugin.version>
    <skipITs>true</skipITs>
    <surefire-plugin.version>3.5.2</surefire-plugin.version>
    <!-- 添加废弃参数跳过原Jar重命名 -->
    <quarkus.package.skipOriginalJarRename>true</quarkus.package.skipOriginalJarRename>
</properties>

<dependencyManagement>
    <dependencies>
    ...
    </dependencies>
</dependencyManagement>

<dependencies>
    ...
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>${quarkus.platform.group-id}</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus.platform.version}</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        ...
        </profile>
</profiles>
</project>

补充说明

  • Quarkus重命名原Jar为.original是为了区分标准Jar和Uber-Jar:foobartest-1.0.0-SNAPSHOT.jar.original是Maven默认生成的标准Jar,最终的Uber-Jar会覆盖原foobartest-1.0.0-SNAPSHOT.jar文件。
  • 文件占用错误大概率是Windows文件锁机制导致:构建进程生成标准Jar后,可能未及时释放文件句柄,导致后续重命名操作失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:47:05