周末不卷,研究下pom.xml里的内容。
一般一个pom.xml文件外面一个project包着以下的标签:
groupId
artifactId
repositories
properties
dependencies
build
plugins
下面分别来说说这几个标签的含义:
1、groupId:表示项目组的id
2、artifactId:表示工程的唯一id
3、version:表示工程的版本号
4、repositories:定义远程仓库的地址,本地仓库的地址一般是:~/.m2/repository,
一般首次编译的时候,如果本地仓库没有依赖的jar包或者插件,会去远程仓库下载到本地仓库,第二次运行的时候就不需要重新下载了。
5、properties: 用于统一管理所依赖的jar包的版本,一般在dependency中的版本中调用。
6、dependencies:用于管理项目所依赖的jar,也会固定带有版本信息,包括其 groupId、artifactId 和 version 等信息。其中的版本也可以调用上面properties所定义的版本。
当然,第一个jar包com.google.guava:guava:12.0.1也可以直接给固定版本。
比如项目这里依赖的flink-streaming-java所需要版本在上面的中定义。
在maven仓库中存在该jar包
我们可以在本地maven仓库找到该jar包
一般本地maven库中的所有jar包都是挂在intelli j这里:
7、build:定义项目的构建配置
8、plugins:在build里面,定义项目所需的插件,包括其 groupId、artifactId 和 version 等(每个Jar包或者是插件都具备这几个基本的)信息。如果这里没有定义插件的配置信息,那么 Maven 会使用默认的构建生命周期插件来执行构建过程。
常见的maven插件如下:
这里定义了项目所需插件:maven-assembly-plugin, 绑定到打包环节。
下面介绍下assembly.xml里面的标签:
id
formats
includeBaseDirectory
fileSets
files
dependencySets
1、id:表示标识符,添加到生成文件名称的后缀符
2、formats:表示支持的打包格式
3、includeBaseDirectory:默认为true。指定打的包是否包含打包层目录(比如finalName是prefix,当值为true,所有文件被放在包内的prefix目录下,否则直接放在包的根目录下。
4、fileSets:管理一组文件的存放位置
5、files:可以指定目的文件名到指定目录
6、dependencySets :用来定制工程依赖 jar 包的打包方式
总结:
以上,描述了一个maven项目pom文件里的标签,以及每个标签的含义。我发现这跟python中的pip有点类似,但是本地python所依赖的包,都需要手动安装(pip install)。pom里定义了项目所依赖的jar包,以及插件,在编译的时候会自动的从远程仓库中下载到本地仓库(~/.m2/repository)。本文使用的是assembly插件进行打包。
关于java打包的几种方式的总结,改天再出一篇文章总结下。
https://blog.csdn.net/qq_44732146/article/details/128936121
https://www.jb51.net/program/2983422q7.htm
https://blog.51cto.com/u_15896157/5896000