- pom:管理maven项目的,内部无源码,配置在父项目中,在子项目继承或聚合maven模块
- war:将项目打成war包,对于web项目来说,通常会设置为war
- jar:普通java项目,通常会设置为jar
dependency:配置jar包的gav坐标,这样maven就可以自动下载相关jar包了
scope:在dependency标签下有一个scope标签,该标签的作用是可以设置依赖在项目的使用阶段,通常来说,项目包含:编译、运行、测试、打包这些不同的阶段。
- compile:是默认值,适用于所有阶段,编译、运行、测试、打包都会包含到项目中
- test:只在测试时使用,用于编译和运行测试代码,不会随项目发布, 例如junit,如果不修改junit依赖中的scope,我们只能在test目录下使用junit相关类。
- runtime:只在运行时使用,例如mysql的JDBC驱动依赖,我们在编写代码的时候使用java.sql包下的类即可,在运行的时候才会用到该依赖,适用运行和测试阶段。
- provided:编译、运行阶段使用,打包时不会包含该依赖,例如servlet.jar,这个包在tomcat容器中已经提供了,因此打包时servlet.jar 无需包含在项目中
- system:类似provided,需要显式提供包含依赖的jar的路径(使用systemPath标签),Maven不会在仓库中查找它。使用较少
optional:在dependency标签下有一个optional标签,若将A的POM文件中某个依赖optional设置为true,则标识项目A的POM文件有如下依赖声明,optional表示该依赖只影响项目A, 如果有项目B依赖了A,则这两个依赖不会被传递;因此如果B依赖了A,并且只用到了spring-cloud-context,则需在B的POM中显示声明依赖spring-cloud-context即可
org.springframework.cloud
spring-cloud-context
3.1.3
compile
true
systemPath:在dependency标签下有一个systemPath标签,引入非本地仓库中的jar包,有时候我们需要使用一些jar包,但是这些jar在maven仓库中并不存在,此时可以使使用下面方式引用,以log4j为例
org.projectlombok
lombok
1.16.18
system
${project.basedir}/src/main/webapp/WEB-INF/lib/log4j-1.2.17.jar
存在问题?如此引入非本地参考的jar包时,在使用maven打包时是不会将该jar打包入项目中的【Maven打包不会将这个非本地仓库的jar包打进去】,所以还需要添加过滤方式:
${project.basedir}/lib BOOT-INF/lib/ **/*.jar src/main/resources BOOT-INF/classes/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
UTF-8 1.8 1.8 4.12 1.2.17 1.16.18 org.projectlombok lombok
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
${basedir} 表示项目根目录,即包含pom.xml文件的目录
${version} 等同于 ${project.version} 或者 ${pom.version} 表示项目版本
- type为pom表示当我们需要引入很多jar包的时候会导致pom.xml过大,我们可以想到的一种解决方案是定义一个父项目,但是父项目只有一个,也有可能导致父项目的pom.xml文件过大。这个时候我们引进来一个type为pom,意味着我们可以将所有的jar包打包成一个pom,然后我们依赖了pom,即可以下载下来所有依赖的jar包
- 父pom.xml管理了版本:
org.apache.zookeeper zookeeper ${zookeeper.version} pom org.slf4j slf4j-log4j12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 子pom.xml引用:
org.apache.zookeeper zookeeper pom
- 1
- 2
- 3
- 4
- 5
- 父pom.xml管理定义了是pom类型,子pom.xml不写pom项目中就不能正常使用相关类。
作用:用来申明依赖,但不导入。dependencies 组件用于导入依赖,注意两者区别特性:
- 子项目不会继承 dependencyManagement 组件中声明的依赖。
- 但如果子项目想导入某个父pom 中 dependencyManagement 中的依赖,只需要填写 groupId 和 artifactId ,不需要填写版本号,maven会自动去父pom 的 dependencyManagement 中找对应的 version,包括scope、exclusions等
org.springframework.cloud
spring-cloud-dependencies
2021.0.3
pom
import