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

如何将编译类放入Uber-JAR的META-INF/services及Maven配置疑问

  • 是否需要配置maven-shade-plugin?
    需要分情况处理:

    • 如果你的项目只有一个模块提供org.apache.flink.statefun.sdk.spi.StatefulFunctionModule服务文件,默认shade插件会直接将其打包进Uber-JAR,无需额外配置。
    • 如果有多个模块(包括依赖的第三方库)都定义了这个services文件,必须给shade插件配置ServicesResourceTransformer,否则打包时后续文件会覆盖之前的,导致部分实现类丢失。配置示例:
      <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>
                <!-- 合并META-INF/services下的所有同名文件 -->
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
      
  • MyClass.class的放置路径
    编译后的MyClass.class必须按照完整包结构放在Uber-JAR的根目录下。比如你的类全限定名是org.package1.package2.MyClass,那么在JAR中的路径应为org/package1/package2/MyClass.class,不要将class文件放到META-INF/services目录下。

  • META-INF/services文件的规则

    • 文件名必须严格为org.apache.flink.statefun.sdk.spi.StatefulFunctionModule,与接口的全限定名完全一致。
    • 文件内容是你的实现类的全限定名,即org.package1.package2.MyClass,每个实现类单独占一行。示例文件内容:
      org.package1.package2.MyClass
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:25:43