简介
maven是一个项目管理工具
依赖管理:maven对项目中jar包的管理过程,真正的jar包放置在仓库中,项目中只需要存放对应的的坐标
一键构建:maven集成了tomcat插件,可以对项目进行编译、测试、打包、安装发布等操作
maven仓库的种类:本地仓库、远程仓库(私服)、中央仓库
仓库之间的关系:当我们启动一个项目的时候,maven会通过pom文件中的坐标去找对应的jar包,默认情况下如果本地仓库没有,会自动去中央仓库下载。若配置了私服会先从私服下载,若私服没有可以从中央仓库下载也可以从本地上传。
mavne 的三套生命周期:清理生命周期、默认生命周期、站点生命周期
解决jar包冲突
导包概念:
直接依赖:项目中直接导入的jar包
传递依赖:项目没有直接依赖的包但是通过直接依赖的包传递到项目中(也就是直接依赖的jar包 它同样有它的依赖包 这些依赖包也会被导入)
原则:
第一申明优先原则(写在上面版本的优先导入)
路径近者优先,直接依赖的路径近
直接排除法(排除某个jar下的依赖包) 推荐使用 因为不怕坐标的位置变动
点此查看视图
排除方式:
dependencyManagement作用
maven工程是可以分父子依赖关系的。
凡是依赖别的项目后,拿到的别的项目的依赖包,都属于传递依赖。
比如:当前A项目,被B项目依赖。那么我们A项目中所有jar包都会传递到B项目中。
B项目开发者,如果再在B项目中导入一套ssm框架的jar包,对于B项目是直接依赖。
那么直接依赖的jar包就会把我们A项目传递过去的jar包覆盖掉。
为了防止以上情况的出现。我们可以把A项目中主要jar包的坐标锁住,那么其他依赖该项目的项目中,
即便是有同名jar包直接依赖,也无法覆盖。
只用于锁定,不会导包.
工程拆分与聚合思想
将一个项目拆分为多个模块(若要开发新项目需要的话则可以直接使用该模块的坐标)
案例
创建父子工程
工程和模块的关系及继承和依赖的关系
工程和模块都不等于完整的项目,一个完整的项目看的是代码,代码完整就是一个完整的项目
工程天生就是独立的只能使用自己本身的资源。但是后天可以和其他工程或模块形成关联关系
模块天生不是独立的,模块属父工程,可以使用所有父工程的资源
父子之间子模块天生继承于父工程,可以使用父工程的所有资源
子模块之间没有任何关系
父子之间的关系不需要建立,继承是先天的
平级的引用叫依赖、依赖不是先天的需要后天建立
拆分与聚合的3种启动方式
1、直接通过maven的tomcat插件启动父工程
2、先使用tomcat插件的install安装父工程在启动web模块 (此时的web模块代码完整,是一个完整的项目。web模块引用了其他模块的坐标,但是maven仓库中并没有这些jar包会报找不到错误)
3、使用本地tomcat
私服
卸载安装和启动
配置文件
打开页面
仓库种类
应用
配置登录私服
修改maven 的settings.xml文件在services中添加
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
配置pom.xml文件
<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>
测试上传
dao模块
已上传到私服
测试下载
将项目打包
在maven仓库中删除dao包
通过web模块启动项目发现报错
此时还不能下载需要配置下载
在settings中添加
<profile>
<!--profile的id-->
<id>dev</id>
<repositories>
<repository>
<!--仓库id,repositories可以配置多个仓库,保证id不重复-->
<id>nexus</id>
<!--仓库地址,即nexus仓库组的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<!--是否下载releases构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载snapshots构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository>
<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
激活
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
再次运行 成功