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

2023-01-14 10:17:50 浏览数 (1)

前言

IDEA中安装Maven Helper插件。

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

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

  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>

0 人点赞