Maven 初学到跑路进阶版

系列文章目录

1.Maven 初学到跑路


1.POM

POM:Project Object Model 项目对象模型
pom.xml :对于Maven工程师核心配置文件,与构建过程相关的所有设置都在这个文件中进行配置。后面的学习都是围绕该配置文件。

2.坐标

对照着数学中的坐标,我们来学习Maven中的坐标文件

  • 在数学中的坐标
        平面中,使用 X , Y 两个向量可以表示平面中的一个点
        空间中,使用 X , Y , Z 三个向量可以标识空间中的一个点
  • 在Maven中的坐标groupid:
        公司或组织域名倒序+项目名
<groupid> com.xiyou.maven</groupid>

    artifactid:模块名

<artifactid>login</artifactid>

    version:版本

<version>1.0.0</version>

3.仓库

  1. 仓库的分类
  • 本地仓库:当前电脑上部署的仓库项目,为电脑上所有Maven工程服务
  • 远程仓库:
    1.私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
    2.中央仓库:假设在Internet上,为全世界所有Maven工程服务
    3.中央仓库镜像:为了分担中央仓库的访问压力,提高用户体验性
  1. 仓库中保存的内容
    Maven自身所需的插件
    第三方框架或者工具的Jar包
    我们自己开发的Maven工程

4.依赖

    我们先要了解一下SNAPSHOTRELEASEd 区别

SNAPSHOT : 不稳定版本 或者 快照版本,表示改项目还处于开发状态,随时都可能发生变化,所以它是不稳定版本。
RELEASE : 代表稳定版本或者发布版本,一般项目上线都会改为RELEASE版本。

案例:

  1. 创建一个与第一个Maven工程相同的目录结构
  2. 将第一个工程安装到Maven仓库中

在这里插入图片描述
3.编辑pom.xml,将第一个工程的依赖导入当前项目中

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xiyou</groupId>
    <artifactId>HelloMaven1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jmod-plugin</artifactId>
                <version>3.0.0-alpha-1</version>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>com.xiyou.maven</groupId>
            <artifactId>FirstMaven</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

4.编写测试案例

/** 
* @author lp
* @version 1.0 
* 
*/public class HelloMavenAgain {    
     public String sayHelloAgain() {     
        HelloMaven helloMaven = new HelloMaven();  
           String result = helloMaven.sayHello("Maven");                                 
           return result + " again";  
                }
}
/** 
* @author lp
* @version 1.0 
*/
public class HelloTest {  
 @Test    
 public void testHello() {      
   HelloMavenAgain again = new HelloMavenAgain(); 
          String result = again.sayHelloAgain();        
          assertEquals("Hello Maven again",result);  
            }
}

5.常见依赖范围对比

常见的依赖范围有三种:compile,test,provided
provided依赖就比如:Servlet的依赖是由tomcat提供的,我们开发的时候要导入该依赖,但是我们部署的时候,一颗由服务器提供,类似于这种依赖关系 我们会使用provided。

1.compile依赖范围

  • 主程序:有效
  • 测试程序:有效
  • 打包:参与
  • 部署:参与

2.test依赖范围

  • 主程序:无效
  • 测试程序:有效
  • 打包:不参与

3.provided依赖范围

  • 主程序:有效
  • 测试程序:有效
  • 打包:不参与
  • 部署:不参与,原本的依赖由服务器提供

6.生命周期

Maven 抽象出了一个适合于所有项目的构建生命周期,并将它们统一规范。具体步骤包括清理、初始化、编译、测试、打包、集成测试、验证、部署和生成站点。这些步骤几乎适合所有的项目,也就是说,所有项目的管理构建过程都可以对应到这个生命周期上来。Maven 在项目的构建过程中,只是在方向和步骤上面起到了管理和协调的作用。

6.1Maven的三个生命周期

Maven中有三个相互独立的生命周期,分别是:

  • Clean Lifecycle:在进行项目构建前进行的一些清理工作
  • **Default Lifecycle:**构建的核心部分,如编译,测试,打包,安装,部署等。
  • Site Lifecycle: 生成项目报告,发布站点等。

6.2Clean 生命周期

  • pre-clean:执行一些需要在clrean之前完成的工作
  • clean:删除上一次构建生产的文件
  • post-clean:执行一些需要在clean之后完成的工作

6.3Default生命周期

  1. validate:验证,验证项目是否正确且所有必须信息是可用的
  2. compile:编译,源代码编译在此阶段完成
  3. Test:测试,使用适当的单元测试框架进行测试,例如JUnit。
  4. package:打包,创建jar包 或 war包
  5. verify:检查,对集成测试的结果进行检查,以保证质量达标
  6. install:安装,安装打包的项目到本地仓库,以供其他程序使用
  7. deploy:部署,拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

在这里插入图片描述
在这里插入图片描述

6.4 Site Lifecycle生命周期

  1. pre-site:执行一些生成站点文档之前所要完成的工作
  2. site:生成项目的站点文档
  3. post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  4. site-deploy:将生成的站点文档部署到特定的服务器上构建中生命周期的

特点:无论你从生命周期的哪一步执行,Maven都会从该生命周期的第一步开始执行

6.5 插件和插件目标:

  1. 生命周期的各个阶段仅仅定义了要执行的任务是什么。
  2. 各阶段和插件的目标是对应的
  3. 相似的目标由特定的插件来完成
  4. 插件目标也可以看作是调用插件的命令
生命周期插件目标插件
compilecompilemaven-compile-plugin
test-compiletestCompilemaven-compile-plugin

7.IDEA中使用Maven

7.1配置Maven插件

idea–>file–>Settings–>Build,Execution,Deployment—>Build Tools–>Maven

在这里插入图片描述
在这里插入图片描述

Maven home directory: maven的安装目录
User settings file:Maven安装目录conf/settings.xml配置文件
Local repository: Maven本地仓库的目录位置

7.2配置Maven环境

在这里插入图片描述
VM Options:-DarchetypeCatalog=internal
-DarchetypeCatalog=internal,maven :Maven项目在创建时,会联网下载模板文件
-DarchetypeCatalog=internal :Maven项目创建时,不下载模板文件,创建速度会提高

JRE:选择JDK6以上版本

8.创建Maven工程

1.创建一个空项目

在这里插入图片描述
在这里插入图片描述

2.创建module
Create from archetype:是创建module使用模板的意思,勾选后可以选择你想创建的模板

  1. maven-archetype-quickstart : 普通的java项目
  2. maven-archetype-webapp : web工程
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
3.使用IDEA中使用Maven命令
在这里插入图片描述
4.IEDA创建普通的Java工程和Web工程

  • 普通工程不使用模板创建即可
  • web工程使用模板webapp(第二步已画出)
    在main目录中添加约定结构(具体参照上一个博客 嘿嘿 )

5.导入已经存在的Maven工程
1.File–>Project from Existing Source

在这里插入图片描述
在这里插入图片描述

9.依赖关系

9.1依赖的传递性

通过快捷键:Alt + Ctrl +Shift + U 调出 Maven项目依赖关系,查看第一个 和 第二个Maven项目间的依赖关系

注意:非compile范围的依赖不能被传递

9.2依赖排除

     在实际开发中,我们经常会遇到Maven依赖冲突的问题,导致编译时报一些异常,处理依赖冲突问题,我们可以解除依赖排除。这里我们提供两种方式,第一种是图形化界面操作,第二种是手动添加依赖排除

9.3依赖原则

     当我们项目中引用了不同版本的jar包,那么传递依赖关系中,被传递的依赖关系如何确定?
1. 就近原则
      如果依赖关系层数不同,则采取就近原则,那么"最上层"- FirstMaven 被传递的 log4j的版本应该是 1.4
在这里插入图片描述

2. 先到先得原则
      如果依赖关系层数相同,则采取先到先得原则。如果在FirstMaven 的 pom.xml中,先声明对ThirdMaven的依赖,则"最上层" -FirstMaven 被传递的 log4j的版本应该是 1.7。

在这里插入图片描述

10.统一管理依赖关系

比如我们后面学习Spring框架时,Spring的各个jar的版本都是5.2.7

<dependency>            
   <groupId>org.springframework</groupId>  
      <artifactId>spring-core</artifactId>     
         <version>5.2.7.RELEASE</version>  
            <scope>compile</scope>                                    
      </dependency> 
      <dependency>            
           <groupId>org.springframework</groupId>            
           <artifactId>spring-aop</artifactId>            
           <version>5.2.7.RELEASE</version>       
       </dependency>      
       <dependency>
          <groupId>org.springframework</groupId>            
          <artifactId>spring-beans</artifactId>            
          <version>5.2.7.RELEASE</version>       
     </dependency>        
     <dependency>            
         <groupId>org.springframework</groupId>            
         <artifactId>spring-tx</artifactId>            
         <version>5.2.7.RELEASE</version>      
  </dependency>





某天,我们需要对Spring进行升级,一个一个手动修改的话,可能会出现遗漏或者错误信息的情况。所以我们使用统一的依赖管理

1.使用properties标签,在其内部使用自定义标签统一声明版本号

在这里插入图片描述
2.在需要统一版本的位置,使用${自定义标签名}引用声明的版本号

<version>${xiyou.spring.version}</version>

11.聚合工程

聚合工程可以一键安装各个模块工程,我们只需要在总聚合工程中配置聚合的模块即可

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安宁#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值