Maven高级

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子模块

dao子模块

唯一需要修改的是spring配置文件,只保留dao层的配置文件

同时,为了和service层的spring配置文件区分,我们定义为:applicationContex-dao.xml

dao层配置文件

3、service 子模块

在parent父模块基础上,创建service子模块

service子模块

因为要使用dao层,所以需要在pom.xml配置文件增加对dao层的引用

增加dao层引用

需要修改的是spring配置文件,只保留service层的配置文件

同时,为了和dao层的spring配置文件区分,我们定义为:applicationContex-service.xml

service层配置文件

4、web子模块

在parent父模块基础上,创建web子模块,因为是web项目,这里可以选择使用骨架webapp创建

web子模块

因为要使用service层,所以在pom.xml文件添加对service层的调用

增加service层调用

修改spring的配置文件,因为已经添加了service层依赖,service层添加了dao层依赖,所以可以直接将配置文件引入

web层配置文件

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包配置

下载jar包配置

2)激活profile

激活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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345