初识Maven

为什么要使用Maven

    在最开始的项目阶段,没有maven对项目进行管理,如果需要什么jar包,需要手工进行替换jar包,然后重启tomcat服务,我第一家工作的公司就是这么干的。

    使用maven的好处是,mavn可以帮助我们管理依赖,不用手工去替换jar包,只需要执行maven命令就可以进行管理。

maven的前身

    1.make 最原始的构建工具,不能跨平台

    2.ant 没有maven的时候流行过一段时间,没用过

    3.maven 目前是最流行的,当然也有用gradle的

安装maven,配置

1.去官网下载对应的maven,官网下载地址:https://maven.apache.org/download.cgi

2.配置环境变量,我就直接粘贴我的配置了,我的是Mac,Windows的按照Windows的配置就可以了

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

PATH=$JAVA_HOME/bin:$PATH:

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

MAVEN_HOME=/Users/mac/apache-maven-3.6.3

PATH=$PATH$MAVEN_HOME/bin

NEXUS_HOME=/Users/mac/nexus/3.20

PATH=$PATH:NEXUS_HOME/bin

3.安装成功后,使用mvn -v命令查看是否安装成功,(没事千万别升级系统,不然一堆坑)

maven的体系架构


最好是使用默认的.m2作为默认配置,如果修改为自定义配置,IDE新的项目读取到的配置实际上还是你老的配置,还需要手工进行修改。

maven坐标

    每个maven项目都有一个唯一的坐标,groupid+artifactId+version+packing+classifier这5个坐标可以定位一个依赖包。

    一般情况下,后二个维度使用的比较少。

    packing:打包的方式,jar包还是war包

    classifier:定义某个工程的附属项目,比如hello-world的hello-world-source功能,也就是对应的源码。

项目中引用依赖

使用<dependency>可引用任何依赖

 依赖范围<scope>

    maven有三套classpath,分别对应着编译源代码的classpath,编译测试代码以及执行测试代码的classpath,运行项目时的classpath。依赖范围就是用来控制依赖包与这三种classpath的关系的。

    不同的依赖范围,可能导致有的包在不同的阶段,有的时候可以用,有的时候不可以用。

    1.compile:默认的,对编译,运行测试都有效。

    2.test:仅仅对运行测试代码的classpath有效。一些测试的依赖,可以设置为这个属性,这样,在打包的时候,会减少包的大小。

    3.provider:编译和测试的时候有效,运行无效。因为环境可能已经提供了,比如servlet-api,tomcat就会提供这个包。

    4.runtime:测试和运行时有效,但是编译代码时无效,比如jadc的驱动类。写代码的时候是基于标准接口去写代码的,但是在测试和运行时会用到这个包。

    传递依赖和依赖冲突解决

    什么是传递依赖:会自动递归解析所有的依赖,然后负责下载下来,接着所有层级的依赖,都会成为我们项目的依赖,不需要我们手工干预。

    比如依赖了junit,junit依赖了A,A又依赖了B,我们这个时候对A的依赖范围就是    ->test。

    比如我们依赖于A是compile,A依赖B是test,那么我们依赖B就是空,也就是说不会去依赖B。传递性依赖对依赖范围是有影响的,传递性依赖会导致多级依赖的依赖范围又交叉在一起,会有影响。


    依赖冲突:maven会自动解析所有的依赖,但是可能会导致依赖冲突的问题A->B ,A->C->B。根据就近原则,离得最近的依赖被优先使用。 如果是这样 A->C->B(1.0),A->D->B(2.0)路径等长的情况下就会使用第一生命原则,哪个依赖在pom.xml里面先声明,就使用哪个。所以这个时候,如果要引用的是2.0,就需要手工排除依赖了。

     可选依赖:<optional>true<optional>,如果A->B->C(optional为true),A就不会去依赖C

Maven构建

Maven的生命周期

    是指对传统软件项目构建工作的抽象,其实对应的就是maven的各种命令,清理初始化,编译,测试打包,集成测试......

    maven有三套完全独立的生命周期,clean,default,site。每套生命周期可以独立运行,并且可以包含多个phase(阶段),每个阶段又是由多个goal(功能插件)组成的。

    maven生命周期的执行原理是 phrase->goal


默认的phrase,maven实际上会绑定默认的goal到phrase上去

maven的聚合功能

    可以将各个模块聚合冲一个大的模块,搞一个父工程出来。现在基本都是这种模式

maven的继承

    在父工程中,使用<dependencyManagement>和<pluginManagement>来声明需要被子工程继承的依赖和插件。在父工程声明了之后,如果子工程也用了这个包,只需要声明groupid和artifacted即可。不需要声明version,因为父工程已经强制约束了使用的版本号。如果你自己配置版本号会提示。

    可以把通用的东西使用<dependencyManagement>和<pluginManagement>来声明,如果使用<dependencies>和<plugins>则会使所有子工程会全部强制继承了。只有当子工程声明了某个依赖或者插件时,但是只引了groupid和artifacted,没有version,这个时候就会去父工程继承。

资源过滤+profile实现环境适配

    大家现在都在用

Nexus

1.下载

    去官网下载安装包,但是官网巨慢,直接从网盘下吧

    地址 https://pan.baidu.com/s/1saMIHrMybnkTVRKQtDCHQQ 提取码:btf6

2.安装

    解压打开,获取到对应的目录,做一些配置,配置在上面有,Mac执行nexus start,在执行nexus status查看状态。

    打开地址:http://localhost:8081,默认端口是8081,可以在配置文件修改端口号,改完了重启nexus就行了。默认密码是admin,admin123,但是3.0会给你生成一个随机的密码,第一次登陆的时候会告诉你在哪,去粘贴就行,然后改成自己喜欢的密码。


3.配置远程仓库从阿里云镜像下载


把这个配置变为阿里云镜像带public的路径就可以 http://maven.aliyun.com/nexus/content/groups/public/

4.创建角色


这个页面可以给不同的角色配置不同的权限,一般我们开发的时候对应的就是这个角色,给repository这个权限大部分就够用了,你要是自己本地开发,直接给一个nx-all,或者在contained里面,直接把nx-admin包含进去也行。

5.创建用户


创建用户,给用户赋予对应的角色,然后在把你设置的这个角色的账号和密码配置到maven的settings.xml里面就可以了。

6.从私服下载jar包

    从nexus下载jar包时默认都可以进行下载,不校验nexus的用户名和密码,做了一个特殊的配置,可以直接下载。

7.配置定时任务


这有个task,可以给不同的任务配置时间表达式。

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

推荐阅读更多精彩内容

  • 你好!我是老王。不做隔壁的邻居,只想交个朋友。欢迎关注我的公众号[王自简]以下内容若引起您的不适,欢迎指正!您的批...
    王自简阅读 303评论 0 0
  • 最近做项目要用到Maven,故对Maven进行了学习,初次接触后,觉得其实和前端的npm很相似,都是项目管理工具,...
    Polaris丶阅读 305评论 0 0
  • Maven是个什么东西 Maven英文翻译是“someone who is dazzlingly skilled ...
    zjuskm阅读 630评论 0 0
  • 最近用到了Maven,就开始看看文档,网上找找资料,看了些视频。现在整理一下,仅供参考。 0x00 关于Mave...
    明月的味道阅读 879评论 4 8
  • 1. Maven 是什么,有什么作用? Maven 是Apache组织中的一个开源项目,主要服务于基于java平台...
    你好明天_4cc4阅读 331评论 0 0