1、可选依赖:
可选依赖不会进行传递,例如:A—>B、B—>X(可选)、B—>Y(可选),那么对于A来说,X、Y都是A的可选依赖,依赖将不会得到传递,换句话来说,X、Y对A不会又任何影响,A不会像传递性依赖一样引入X、Y,传递性依赖的表示
com.ck
common-data
${common-data.version}
true
2、排除依赖:如果A依赖B,B又依赖C,那么根据传递性依赖,那么A会引入C如果想要排除C
org.thymeleaf
thymeleaf-spring4
${thymeleaf.version}
thymeleaf
org.thymeleaf
3、归类依赖:设置统一版本号:
2.9.5
com.fasterxml.jackson.core
jackson-annotations
${jackson-version}
4、优化依赖:
查看当前项目已经解析依赖:mvn dependency:list
查看当前项目依赖树:mvn dependency:true
依赖分析:mvn dependency:analyze
Used undeclared dependencies found:这个是指项目中使用到的但是没有显示声明的依赖,然而是通过直接依赖传递过来的,也就是传递性依赖,当升级直接依赖的时候,相关传递性依赖的版本也可能发生变化,这种变化可能导致项目出错,因此,显示声明项目中直接用到的依赖
Unused declared dependencies found:这个是项目中未使用的,但显示声明的依赖,这类依赖需要小心分析,因为依赖分析只能分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖它发现不了,对于分析后实在无用的依赖,确实可以直接删除;
5、maven仓库:
分为本地仓库和远程仓库,远程仓库又分为私服和中央仓库、其它公共仓库;
本地仓库:本地仓库地址的配置文件在settings.xml文件里面
D:\Users\xxx\.m2\repository\
一般项目构建时先从本地仓库查看依赖构件,如果查不到则从远程仓库搜索构建,如果远程仓库也查不到构建则会报错,如果本地项目有A、B,A项目依赖B项目,那么可以先使用将B项目打包(打包命令 mvn clean install)放到本地仓库,然后A项目就可以依赖使用B项目;
6、配置认证信息:settings.xml
releases
xxx
xxxx
snapshots
xxxx
xxxxx
最关键的是id,这个id和远程仓库的id必须一致;
7、部署至远程仓库:
pom.xml文件配置:
xx
xxx
http://localhost:8080
id是该远程仓库的唯一标识,name是用户任取的,url表示该仓库的地址往远程仓库部署的时候一般需要认证,前面已经说过了,执行命令:mvn clean deploy,将构建部署到远程仓库;
8、镜像:镜像可以看成是仓库的代理,所有能从仓库获取的构件都可以从镜像获取到,而且速度更快;
setting.xml配置文件:
xxxx
center
public
http://xxx
9、maven插件:
查看插件信息命令:mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
查看项目依赖list:mvn dependency:list
查看项目依赖树:mvn:dependency:tree
插件的远程仓库配置:
xxxx
http://xxxx
true
warn
true
always
fail
我们在配置插件的时候,经常看见插件没有配置groupId,如下所示:
maven-eclipse-plugin
2.9
这是因为maven在解析插件的时候,如果没有发现groupId,会自动用默认的groupId, org.apache.maven.plugins补齐,当没有配置版本号的时候,核心插件会在超级pom种设定版本,例如maven-clean-plugin。 对于非核心pom,maven2的策略是使用latest版本,这个版本可能是快照版本,不是很稳定,maven3的策略是使用release版本,这样可以避免由于快照频繁更新而导致的插件行为不稳定;
10、Maven版本号的定义:
格式:<主版本>.<次版本>.<增量版本>-<里程碑版本>
例如:1.3.4-beta-2 解释:1表示第一次重大版本,3表示大版本下的第三个次要版本,4表示此版本的第四次增量,最后的beta-2表示此版本的一个里程碑,一般的主版本、次版本是必须要的;