【略懂略懂】Maven入门笔记

楔子

最近小娇娇同学有点烦恼,她明明执行了install,相关项目的依赖却没有变化,于是她不停地clean、install,项目有时候能行,有时候不行,所以她一脸懵B的找到小七帮忙看看原因,当然像小七这么乐于助人的绅士肯定是义不容辞呀,于是手把手带她入门。

第一章、Maven安装

1.1、Windows下安装

1.1.1、下载

1.前往http://maven.apache.org/download.cgi下载最新版的Maven程序

【略懂略懂】Maven入门笔记_第1张图片

1.1.2、安装

解压压缩包即可

【略懂略懂】Maven入门笔记_第2张图片

1.1.3、配置环境变量

右键“此电脑->属性->高级系统设置->环境变量”

【略懂略懂】Maven入门笔记_第3张图片

在Path中添加maven路径

图片

1.1.4、检查安装是否成功

按下windows键 + R键,输入cmd,在弹出的命令行窗口中,输入mvn -v能够正确输出版本信息,则证明mvn安装成功。

【略懂略懂】Maven入门笔记_第4张图片

第二章、Maven基本概念

2.1、概要

Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以管理一个项目的构建,发布和文档。(摘于官方网站)

2.2、Maven项目结构

2.2.1、Maven项目标准结构

maven-demo(项目名称)
|---------pom.xml(项目配置文件)
|---------src
          |---------main(主程序目录)
                    |---------java(主程序的Java源文件目录)
                    |---------resources(主程序的资源文件目录)
          |---------test(测试程序目录)
                    |---------java(测试程序的Java源文件目录)
                    |---------resources(测试程序的资源文件目录)

2.2.2、pom文件

所有 POM 文件一般都需要 project 根元素和三个必需字段:groupId,artifactId,version。

例子:



    sheep-web-demo
    sheep-web-demo
    1.0-SNAPSHOT

2.3、Maven 编译

2.3.1、创建Maven项目

创建一个空项目

图片

2.3.2、创建src 文件

图片

2.3.3、编写 pom 文件

【略懂略懂】Maven入门笔记_第5张图片



    4.0.0
    maven-text
    maven-text
    1.0-SNAPSHOT


2.3.4、执行编译命令

mvn compile

出现以下命令则为编译成功
【略懂略懂】Maven入门笔记_第6张图片

2.4、Maven打包

mvn package

2.5、Maven单元测试

2.5.1、编写测试类

/**
 * 测试类
 *
 * @author 第七人格
 * @date 2021/3/25 21:00
 */
public class TestMaven {
    public void testMaven(){
        System.out.println("============This is test===========");
    }
}

2.5.2、执行测试命令

mvn test

【略懂略懂】Maven入门笔记_第7张图片

注意:必须是Test开头的类名与test 开头的方法才会执行(约定)。

2.6、配置文件常用参数(settings.xml)

2.6.1、本地仓库地址

 <localRepository>....localRepository>

2.6.2、私服相关

  <server>
    <id>releasesid>
    <username>adminusername>
    <password>123456password>
  server>

2.6.3、镜像

<mirror>
	  
      <id>planetmirror.comid>
      
      <name>aliyunname>
      
      <url>http://maven.aliyun.com/nexus/content/groups/public/url>
      
      <mirrorOf>centralmirrorOf>
mirror>

第三章、Maven核心配置

3.1、Maven依赖管理

3.1.1、依赖配置

通过3要素(groupId,artifactId,version)定位,写在标签

 ......

内,如下所示


    ...
  
    
        ...
        ...
        ...
    
      ...
      ...
      可添加多个依赖
      ...
      ...
  
    ...


3.1.2、依赖传播特性

我们的项目通常需要依赖第三方组件,而第三方组件又会依赖其它组件遇到这种情况Maven会将依赖网络中的所有节点都会加入ClassPath当中,这就是Maven的依赖传播特性。

3.1.3、依赖优先原则

基于依赖传播特性,导致整个依赖网络会很复杂,难免会出现相同组件不同版本的情况。Maven此时会基于依赖优先原则选择其中一个版本。

第一原则:最短路径优先。
第二原则:相同路径下配置在前的优先。

3.1.4、可选依赖


标签内新增

true 

表示,默认是不可选的。可选依赖不会被传递。

3.1.5、排除依赖


    
       ....
       ....
    


3.1.6、依赖范围

类型 范围 例子
compile(默认) 编译打包都会依赖
provided 编译依赖,打包不依赖 servlet-api.jar
runtime 打包依赖,编译不依赖 mysql-connector-java.jar
test 编译允许测试用例依赖 junit.jar
system 表示由系统中CLASSPATH指定。编译时依赖,打包不依赖

语法如下:


	...
	...
	...
	
	compile


3.2、项目聚合

聚合需要个父工程,然后使用

  

进行配置。

pom文件如下:

【略懂略懂】Maven入门笔记_第8张图片

项目工程结构如下

【略懂略懂】Maven入门笔记_第9张图片

该示例是小七的一个记录demo,项目地址:

https://gitee.com/diqirenge/sheep-web-demo

3.3、项目继承

继承是指子工程直接继承父工程当中的属性、依赖、插件等配置,避免重复配置。

三个配置子工程都可以进行重写,重写之后以子工程的为准。在父工程中使用
管理依赖


  
    
      ....
      ....
      ....
    
  


子工程中,可以不再写


,只需要写坐标即可


   ....
   ....


第四章、Maven生命周期

4.1、概念

maven 总共包含三大生生命周期

  1. clean Lifecycle :清理生命周期,用于于清理项目。

  2. default Lifecycle:默认生命周期,用于编译、打包、测试、部署等。

  3. site Lifecycle 站点文档生成,用于构建站点文档。

注意点:default Lifecycle的生命周期,位于后面的节点执行时,总会先执行前面的节点。

4.2、意义

1、统一步骤,规范化

2、解耦,便于拓展

4.3、对照表

生命周期(lifecycle) 阶段(phase) 描述(describe)
clean Lifecycle pre-clean 预清理
clean 清理
post-clean 清理之后
default Lifecycle validate 验证
initialize 初始化
generate-sources
process-sources
generate-resources
process-resources
compile 编译
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile 编译测试类
process-test-classes
test 执行测试
prepare-package 构建前准备
package 打包构建
pre-integration-test
integration-test
post-integration-test
verify 验证
install 上传到本地仓库
deploy 上传到远程仓库
site Lifecycle pre-site 准备构建站点
site 构建站点
post-site 构建站点之后
site-deploy 站点部署

第五章、Maven插件

5.1、语法

语法如下


    ....
    ....
    ...
    
        
            执行器命名
            执行的阶段
            
                执行一组目标或功能
            
             
执行目标所需的配置文件
            
        
    


5.2、常用插件

自动拷贝jar包到target目录


    
        
        
            org.apache.maven.plugins
            maven-dependency-plugin
            2.6
            
                
                    copy-dependencies
                    compile
                    
                        copy-dependencies
                    
                    
                        
                        ${project.build.directory}/lib
                        
                        false
                        
                        true
                    
                
            
        
    


更多插件:https://maven.apache.org/plugins/index.html

5.3、自定义插件开发

5.3.1、创建Maven 插件项目

【略懂略懂】Maven入门笔记_第10张图片

5.3.2、设定packaging 为Maven-plugin

maven-plugin

5.3.3、添加插件依赖


    
        org.apache.maven
        maven-plugin-api
        3.0.3
    
    
        org.apache.maven.plugin-tools
        maven-plugin-annotations
        3.1
    


5.3.4、编写插件实现逻辑

/**
 * 自定义插件
 *
 * @author 第七人格
 * @date 2021/03/25
 */
@Mojo(name = "sevenPlugin")
public class SevenPlugin extends AbstractMojo {
    @Parameter
    String sex;
    @Parameter
    int age;
    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info(String.format("seven sex=%s,age=%s" ,sex, age));
    }
}

5.3.5、打包构建插件

mvn package

5.3.6、安装插件

发布到本地仓库,本地其他项目可以调用

mvn install

5.3.7、发布插件

发布到仓库,其他项目可以调用

mvn deploy

第六章、nexus 私服搭建

6.1、下载

下载地址:https://www.sonatype.com/nexus/repository-oss/download

6.2、安装

解压后,进入bin目录下

图片

运行命令:nexus.exe /run

出现以下文字,则启动成功

【略懂略懂】Maven入门笔记_第11张图片

6.3、初始密码

初始密码位于“\sonatype-work\nexus3”下的“admin.password”里

6.4、创建代理仓库

【略懂略懂】Maven入门笔记_第12张图片

这里填阿里云地址

http://maven.aliyun.com/nexus/content/groups/public/

图片

6.5、设置代理仓库

【略懂略懂】Maven入门笔记_第13张图片

6.6、项目配置

在我们的pom文件中加入以下代码


	
		releases
		maven-releases
		http://127.0.0.1:8081/repository/maven-releases/
		true
	
	
		snapshots
		maven-snapshots
		http://127.0.0.1:8081/repository/maven-snapshots/
		true
	


如果你的版本带着releases,也就是 0.0.1-releases,就会发布到 maven-releases。
如果你的版本带着snapshots,也就是 0.0.1-snapshots,就会发布到 maven-snapshots。

第七章、IntelliJ IDEA和Maven

7.1、插件推荐

Maven Helper可视化maven操作(更多插件请移步

https://blog.csdn.net/a18602320276/article/details/114637244?spm=1001.2014.3001.5501)

【略懂略懂】Maven入门笔记_第14张图片

7.1.1、快速解决依赖冲突

pom文件添加以下代码,他们依赖的spring-beans 的版本都是5.2.8,所以会造成依赖冲突。

    
        org.springframework
        spring-webmvc
        5.2.8.RELEASE
    
    
        org.springframework
        spring-jdbc
        5.2.6.RELEASE
    

启动报错
【略懂略懂】Maven入门笔记_第15张图片

解决依赖冲突
【略懂略懂】Maven入门笔记_第16张图片
红色就是有依赖冲突的地方,选中右键“exclude”即可,快速排除依赖
【略懂略懂】Maven入门笔记_第17张图片
【略懂略懂】Maven入门笔记_第18张图片

7.2、maven配置

【略懂略懂】Maven入门笔记_第19张图片

7.3、项目创建

第八章、从开发问题回顾Maven

8.1、问题一:小娇娇同学clean、install为什么有时候有效,有时候无效。

clean错项目了,项目A依赖于项目B,如果项目B变化了,应该install的是项目B,而不是项目A,项目A只需要重新导入相关依赖即可。参考第三章、项目依赖管理。

8.2、问题二:依赖冲突,导致项目启动报错。

最常见的就是 log4j与slf4j的依赖冲突,这个时候排除相关依赖即可。参考3.1.5和7.1.1。

8.3、问题三:明明仓库里有jar包,idea却找不到

(1)idea的问题,重启后生效

【略懂略懂】Maven入门笔记_第20张图片

(2)jar包下载不完成,仓库删除后重新下载,建议配置国内镜像,参考2.6.2。

第九章、后记

小七以前写博客,基本都是出于自己记录的目的。同事和朋友,都吐槽过看不懂,写得太糙了,自己懂得和分享出来,让大家懂得是完全不同的,从以后每篇文章,小七都慢慢写,争取和这篇文章一样,写7、8个小时(忘了吃晚饭了o(╥﹏╥)o)。

第十章、附件

10.1、Maven官方网址

https://Maven.apache.org/

10.2、Maven依赖搜索

https://mvnrepository.com/

10.3、文章demo源码

https://gitee.com/diqirenge/maven

你可能感兴趣的:(略懂略懂,maven)