Maven依赖管理
1、解决jar包冲突
1)第一声明者优先原则
哪个jar包的坐标在靠上的位置,那这个jar包就是先声明的,先声明的jar包坐标下的依赖包,就可以优先进入到项目中
2)路径近者优先原则
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去
直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包
3)排除依赖(推荐使用)
当我们要排除某个jar包下的依赖包,可以通过标签exclusions-exclusion配置要排除的依赖包,标签内部可以不写版本号(和当前jar包版本一致)
2、依赖传递
凡是依赖别的项目后,拿到的别的项目的依赖包,都属于传递依赖;
如:当前项目A,依赖项目B,那么项目B中所有jar包都会传递到项目A中;
A项目的开发者,如果再在A项目中导入一套SSM框架的jar包,对于A项目是直接依赖;
那么直接依赖的jar包就会把B项目传递过去的jar包覆盖掉;
如果A项目的SSM框架版本号很低,而B项目SSM框架版本号很高,由于直接依赖的是低版本的,就可能会使依赖的B项目jar包出现问题;
为了防止这种情况出现,可以将B项目中的主要jar包坐标锁住,那么其他依赖该项目的项目中,即使有同名的jar包直接依赖,也无法覆盖。
锁定jar包版本:
<dependencyManagement>
<dependencies>
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
锁定jar包版本只是锁定的版本,并没有将jar包导入到项目中
3、统一管理jar包版本
1)声明对应版本号
<properties>
<spring.version>5.2.1.RELEASE</spring.version>
</properties>
2)在依赖坐标中,引用对应版本号
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
通过版本锁定,以后在修改jar版本时,只需要修改properties中声明的版本号,依赖中的版本因为是引用过来的,可实现同步修改
分模块构建工程
工程和模块的区别:
工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目是看代码,代码完整,就是一个完整的项目,和此项目是工程还是模块没有关系
工程天生只能使用自己内部资源,工程天生是独立的;但可以和其他工程或模块建立关联关系
模块天生不是独立的,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用
父子工程之间:子模块天生继承父工程,可以使用父工程所有资源
子模块之间:天生是没有任何关系
父子工程之间不用建立关系,继承关系是先天的,不需要手动建立
平级之间的引用叫依赖,依赖不是先天的,需要后天建立
1、parent 父模块
创建maven父工程,可以不使用骨架,只保留pom.xml
向pom.xml配置文件添加对应的依赖
2、dao 子模块
在parent父模块基础上,创建dao子模块
唯一需要修改的是spring配置文件,只保留dao层的配置文件
同时,为了和service层的spring配置文件区分,我们定义为:applicationContex-dao.xml
3、service 子模块
在parent父模块基础上,创建service子模块
因为要使用dao层,所以需要在pom.xml配置文件增加对dao层的引用
需要修改的是spring配置文件,只保留service层的配置文件
同时,为了和dao层的spring配置文件区分,我们定义为:applicationContex-service.xml
4、web子模块
在parent父模块基础上,创建web子模块,因为是web项目,这里可以选择使用骨架webapp创建
因为要使用service层,所以在pom.xml文件添加对service层的调用
修改spring的配置文件,因为已经添加了service层依赖,service层添加了dao层依赖,所以可以直接将配置文件引入
5、父工程xml文件
每次在父工程中创建新的子模块,父工程pom.xml文件都会创建对应的模块
私服
1、安装
Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。
通过nexus官网nexus下载OSS版本,由于官网下载问题,这里提供网盘下载地址:
链接:https://pan.baidu.com/s/1-Fn_leESiBi3fRWID7ehWA 提取码:o87h
将压缩包下载后,解压,通过命令行,进入bin目录(管理员权限),运行命令:nexus /install
nexus版本:nexus-2.12.0-01-bundle
jdk版本:1.8
2、启动
可以通过命令行,进入bin目录,运行命令:nexus /start
或者直接进入服务,启动服务
启动成功后,通过浏览器访问管理控制台:http://localhost:8081/
使用 Nexus 内置账户 admin/admin123 登陆
仓库类型:
1)hosted:宿主仓库,部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部分,Releases 公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库
2)proxy:代理仓库,用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私服自动去中央仓库下载 jar 包或者插件。
3)group:仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓库组。
4)virtual(虚拟):兼容 Maven1 版本的 jar 或者插件
nexus 仓库默认在 sonatype-work 目录中:
3、应用
应用1:将项目发布到私服
1)需要在客户端即部署 ssm_dao 工程的电脑上配置 maven环境,并修改 settings.xml(maven安装目录下的conf文件夹)文件,配置连接私服的用户和密码
此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致
2)配置项目 pom.xml
配置私服仓库的地址,本公司的自己的 jar 包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为 release 则上传到私服的 release 仓库,如果版本为snapshot 则上传到私服的 snapshot 仓库
注意:pom.xml 这里id和 settings.xml 配置id对应
3)对将要上传到私服的项目,通过maven生命周期中的deploy命令,将项目发布到私服(同时发布到本地仓库)
应用2:从私服下载jar包
1)修改 settings.xml(maven安装目录下的conf文件夹)文件,修改下载jar包配置
2)激活profile
此时,maven 会先从本地仓库找,如果找不到 jar 包再从私服找,从而就实现了从私服下载 jar 包。
应用3:安装第三方jar包到私服
1)修改 settings.xml(maven安装目录下的conf文件夹)文件,增加登录私服第三方登录信息
2)方式1:进入jar包所在目录运行
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
方式2:打开cmd直接运行
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\alibaba\fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
4、安装第三方jar包到本地仓库
方式1:进入jar包所在目录运行命令:
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
方式2:打开cmd直接运行
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\alibaba\fastjson-1.1.37.jar
以上相关配置链接:链接:https://pan.baidu.com/s/1VDCayfjqTPcDK2_Q4W_ZcA 提取码:sg3i