前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flink开发-生成Jar(Maven依赖处理)

Flink开发-生成Jar(Maven依赖处理)

作者头像
码客说
发布2023-01-14 10:17:50
2K0
发布2023-01-14 10:17:50
举报
文章被收录于专栏:码客码客

前言

IDEA中安装Maven Helper插件。

image-20230113165725885
image-20230113165725885

安装重启后,点击pom.xml可以看到两个选项卡,可以查看依赖的关系。

image-20230113165954316
image-20230113165954316

其中三个选项分别表示如下:

  1. Conflicts(查看所有冲突的依赖,所有的冲突依赖都会在下面显示)
  2. All Dependencies as List(列表形式查看所有依赖,冲突的依赖会红字显示)
  3. All Dependencies as Tree(树形式查看所有依赖,冲突的依赖会红字显示)

Maven打包流程

构建项目的几个环节

  • 清理(clean):删除以前的编译结果,为重新编译做好准备。
  • 编译(compile):将Java 源程序编译为字节码文件。
  • 测试(test):针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  • 打包(package):将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。
  • 安装(install):在 Maven 环境下特指将打包的结果(jar包或war包)安装到本地仓库中。
  • 部署(deploy):将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

打包区别

  • mvn package:打包到本项目,一般在项目target目录下。
  • mvn install:打包到本地仓库,如果没设置Maven本地仓库,一般在用户/.m2目录下。
  • mvn deploy:打包上传到远程仓库,如:私服nexus等,需要配置pom文件。

打包过程

清理并打包

代码语言:javascript
复制
mvn clean package

依次执行:clean、resources、compile、testResources、testCompile、test、jar(打包)。

清理、打包并安装到本地Maven中

代码语言:javascript
复制
mvn clean install

依次执行:clean、resources、compile、testResources、testCompile、test、jar(打包)、install。

清理、打包并安装到本地和远程Maven中

代码语言:javascript
复制
mvn clean deploy

依次执行:clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy。

由上面分析主要区别如下:

  • package命令:完成项目编译、单元测试、打包功能,但打包文件未部署到本地Maven仓库和远程Maven仓库。
  • install命令:完成项目编译、单元测试、打包功能,同时把打包文件部署到本地Maven仓库,但未部署到远程Maven仓库。
  • deploy命令:完成项目编译、单元测试、打包功能,同时把打包文件部署到本地Maven仓库和远程Maven仓库。

打包设置

代码语言:javascript
复制
<packaging>jar</packaging>

<build>
  <plugins>
    <plugin>
      <groupId>net.alchim31.maven</groupId>
      <artifactId>scala-maven-plugin</artifactId>
      <version>3.4.6</version>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.xhkjedu.TCS</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

运行报错

Unable to instantiate java compiler

原因

flink服务器上的 flink-table-blink_2.11-1.12.0.jar 将calcite等依赖打入,因此用户的jar包中需要排除calcite相关依赖。

用户项目中可使用maven helper搜索calcite相关依赖,将其provided,并将这些依赖放入flink lib目录下,重启flink服务即可

常见的包含calcite的依赖有:

  • hive-exec
  • flink-table-planner
  • flink-table-planner-blink
  • calcite-core

Flink部署的jar在项目中是首先要排除provided的

示例

代码语言:javascript
复制
<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-exec</artifactId>
  <version>${hive.version}</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
  <version>${flink.version}</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-planner-blink_2.12</artifactId>
  <version>${flink.version}</version>
  <scope>provided</scope>
</dependency>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Maven打包流程
    • 构建项目的几个环节
      • 打包区别
        • 打包过程
        • 打包设置
        • 运行报错
        相关产品与服务
        大数据
        全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档