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

Quarkus升级至3.0.3后无法生成Azure Function的Uber-Jar问题

Quarkus 3.0.3 Azure Functions 无法生成 Uber-Jar 的问题解决

问题原因

Quarkus 3.x 对 Azure Functions 的打包机制做了有意变更:quarkus-azure-functions-http 3.x 版本默认不再生成传统的 uber-jar,而是适配 Azure Functions 的部署规范,生成专用的目录结构部署包,这是已知的版本行为差异,并非 bug。

解决方案

方案一:使用官方推荐的 Azure Functions 打包流程

这是 Quarkus 3.x 针对 Azure Functions 的标准部署方式,无需手动生成 uber-jar:

  1. 在 pom.xml 中配置 quarkus-maven-plugin 和 azure-functions-maven-plugin:
<build>
    <plugins>
        <!-- Quarkus 构建插件 -->
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>3.0.3.Final</version>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- Azure Functions 打包插件 -->
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-functions-maven-plugin</artifactId>
            <version>1.23.0</version>
            <configuration>
                <appName>你的函数应用名称</appName>
                <resourceGroup>你的资源组名称</resourceGroup>
                <region>你的Azure区域</region>
                <runtime>
                    <os>linux</os>
                    <javaVersion>17</javaVersion> <!-- Quarkus 3.x 推荐使用 Java 17+ -->
                </runtime>
            </configuration>
            <executions>
                <execution>
                    <id>package-functions</id>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 执行命令构建部署包:
mvn clean package
  1. 构建完成后,target/azure-functions/你的函数应用名称 目录下会生成符合 Azure 要求的完整部署包,直接部署即可。

方案二:强制生成 Uber-Jar(特殊场景)

如果因特殊部署需求必须生成 uber-jar,可通过以下步骤实现:

  1. 调整依赖:移除 quarkus-azure-functions-http,改用基础依赖组合:
<dependencies>
    <!-- Quarkus HTTP 核心依赖 -->
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-vertx-http</artifactId>
        <version>3.0.3.Final</version>
    </dependency>
    <!-- Azure Functions Java 核心库 -->
    <dependency>
        <groupId>com.microsoft.azure.functions</groupId>
        <artifactId>azure-functions-java-library</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>
  1. 配置 maven-shade-plugin 构建 uber-jar:
<build>
    <packaging>jar</packaging>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <!-- 指定 Azure Functions 入口类 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.microsoft.azure.functions.worker.handler.FunctionApplication</mainClass>
                            </transformer>
                            <!-- 合并服务配置文件 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                        <!-- 签名文件过滤,避免打包冲突 -->
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 执行命令生成 uber-jar:
mvn clean package

生成的 uber-jar 位于 target/ 目录下,需手动配置 Azure Functions 的函数入口和触发规则。

注意事项

  • Quarkus 3.x 基于 Jakarta EE 9+,需确保 Azure Functions Java 依赖版本(如 azure-functions-java-library)在 3.0.0 及以上,以兼容 Jakarta API。
  • 方案二属于自定义打包方式,需自行维护 Azure Functions 与 Quarkus 的适配逻辑,官方优先推荐方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:23:24