基础知识回顾
maven是一个项目管理工具
依赖管理:
maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。
maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
一键构建:
maven自身继承了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。
仓库种类:
本地仓库,远程仓库(私服),中央仓库
maven常用命令:
clean,compile,test,package,install,deploy。
maven生命周期:
清理生命周期,默认生命周期,站点生命周期
jar包的依赖冲突
解决方式一:
第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就先声明,先声明的jar包坐标下的依赖包,可以优先进入项目中。
maven导入jar包中的一些概念:
- 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
- 传递依赖:项目中没有直接导入的jar包,可以通过项目直接以来jar包传递到项目中去。
解决方式二:
路径近者优先原则。直接依赖路径笔传递路径近,那么最终项目进入的jar包是路径近的直接依赖包。
解决方式三:
当我们要排除某个jar包下依赖包,可以使用exclusions标签,在配置exclusions标签的时候,内部不写版本号。
常用标签的作用
- dependencyManagement 作用jar包版本
- properties 管理jar包版本
maven解决代码可重用和便于维护问题
maven把一个完整的项目,分为不同的独立模块,这些模块都有独立坐标,哪个地方需要其中某个模块,直接饮用该模块的坐标即可。
今后如果公司开发一个新项目,我们先考虑的问题不是dao、service、utils、domain如何编写,而是看dao、service、utils、domain这些模块是否存在,若存在,直接引用即可。
我们可以吧拆分零散的模块局喝到一起编写一个完整的项目,这就是聚合思想。
工程和模块的区别
- 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目,和此项目是工程和模块没有关系。
- 工程天生只能使用自己的资源,是独立的。后天可一个其他工程和模块建立关联关系,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用
- 子模块之间天生是没有关系的
- 依赖的jar包可能出现丢失问题
私服配置
maven中setting的配置
存入私服:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
从私服中下载:
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
激活:
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
maven中的配置
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>