前言
IDEA中安装Maven Helper
插件。
安装重启后,点击pom.xml可以看到两个选项卡,可以查看依赖的关系。
其中三个选项分别表示如下:
Conflicts
(查看所有冲突的依赖,所有的冲突依赖都会在下面显示)All Dependencies as List
(列表形式查看所有依赖,冲突的依赖会红字显示)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>