58、Flink 的项目配置使用 Maven 详解

2)使用 Maven
1.版本要求
  • Maven 3.8.6 (推荐或者使用更高版本)
  • Java 8 (deprecated) or Java 11
2.将项目导入 IDE

创建项目目录和文件后,建议将此项目导入到 IDE 进行开发和测试。

IntelliJ IDEA 支持开箱即用的 Maven 项目。

注意: Java 的默认 JVM 堆大小对于 Flink 来说可能太小,应该手动增加它;在 IntelliJ IDEA 中,推荐选中 Help | Edit Custom VM Options 菜单修改 JVM 属性。

关于 IntelliJ 的注意事项: 要使应用程序在 IntelliJ IDEA 中运行,需要在运行配置中的 Include dependencies with "Provided" scope 打勾;如果此选项不可用(可能是由于使用了较旧的 IntelliJ IDEA 版本),可创建一个调用应用程序 main() 方法的测试用例。

3.构建项目

如果想 构建/打包 项目,请转到项目目录并运行 'mvn clean package' 命令,将 找到一个 JAR 文件 ,其中包含应用程序(还有已作为依赖项添加到应用程序的连接器和库):target/-.jar

注意: 如果使用不同于 DataStreamJob 的类作为应用程序的主类/入口点,建议对 pom.xml 文件里的 mainClassName 配置进行相应的修改,使 Flink 可以通过 JAR 文件运行应用程序,而无需额外指定主类。

4.向项目添加依赖项

打开项目目录的 pom.xml,在 dependencies 标签内添加依赖项。

例如,可以用如下方式添加 Kafka 连接器依赖:

复制代码
<dependencies>
    
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka</artifactId>
        <version>1.19.0</version>
    </dependency>
    
</dependencies>

然后在命令行执行 mvn install

当在由 Java Project TemplateScala Project Template 或 Gradle 创建出来的项目里,运行 mvn clean package 会自动将应用程序依赖打包进应用程序 JAR。

对于不是通过这些模板创建的项目,建议使用 Maven Shade 插件以将所有必需的依赖项打包进应用程序 jar。

重要提示: 应将所有这些(核心)依赖项的生效范围置为 provided 。即需要对它们进行编译,但不应将它们打包进项目生成的应用程序 JAR 文件中;如果不设置为 provided,最好的情况是生成的 JAR 变得过大,因为它还包含所有 Flink 核心依赖项;最坏的情况是添加到应用程序 JAR 文件中的 Flink 核心依赖项与集群一些依赖项的版本冲突(通常通过反向类加载来避免)。

要将依赖项正确地打包进应用程序 JAR 中,必须把应用程序依赖项的生效范围设置为 compile

5.打包应用程序

在部署应用到 Flink 环境之前,需要根据使用场景用不同的方式打包 Flink 应用程序。

如果想为 Flink 作业创建 JAR 并且只使用 Flink 依赖而不使用任何第三方依赖(比如使用 JSON 格式的文件系统连接器),则不需要创建一个 uber/fat JAR 或将任何依赖打进包。

如果想为 Flink 作业创建 JAR 并使用未内置在 Flink 发行版中的外部依赖项,可以将它们添加到发行版的类路径中,或者将它们打包进您的 uber/fat 应用程序 JAR 中。

可以将生成的 uber/fat JAR 提交到本地或远程集群:

复制代码
bin/flink run -c org.example.MyJob myFatJar.jar
6.创建包含依赖项的 uber/fat JAR 的模板

为构建一个包含所有必需的连接器、 类库依赖项的应用程序 JAR,可以使用如下 shade 插件定义:

复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <excludes>
                                <exclude>com.google.code.findbugs:jsr305</exclude>
                            </excludes>
                        </artifactSet>
                        <filters>
                            <filter>
                                <!-- Do not copy the signatures in the META-INF folder.
                                Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <!-- Replace this with the main class of your job -->
                                <mainClass>my.programs.main.clazz</mainClass>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Maven shade 插件默认会包含所有的生效范围是 "runtime" 或 "compile" 的依赖项

相关推荐
Raas1006 小时前
MAI Gateway(魔芋企业级AI网关)技术揭秘:AI网关支持哪些模型?从原理到落地
大数据·人工智能·网关·gateway·mai gateway·企业级产品
YangYang9YangYan8 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
大大大大晴天9 小时前
OpenMetadata VS DataHub VS Atlas VS Gravitino
大数据
Qyr9912 小时前
2026全球汽车碳刷行业发展全景分析报告
大数据
蓝速科技12 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
精益数智工坊13 小时前
云计算环境数据怎么同步?云计算集成方案有哪些?
大数据·人工智能·数据挖掘·数据可视化
huashengzsj14 小时前
什么是DMS经销商管理系统?国内经销商管理系统有哪些品牌
大数据
IT毕设梦工厂15 小时前
计算机毕业设计选题推荐:基于大数据的草鱼价格分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·数据挖掘·数据分析·课程设计·大数据毕设项目
辛迪聊物业数字化15 小时前
智慧社区物业管理软件新手部署与实操指南
大数据·php
字节跳动数据平台15 小时前
模型再强,为什么 Demo 还是进不了生产?
大数据