1.Maven简介:

        Maven是一个项目管理工具,是采用了POM(项目对象模型)的模式来进行管理,可以简单高效的实现对项目的清理、编译、打包、测试、发布和部署,简单来说就像一个产自大厂的电脑一样,不需要我们自己去组装,架构摆在那里,我只需要自己挑选配置就好了;

1.1Maven安装:

官网下载地址:https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.zip

官网地址:https://maven.apache.org/

1.2Maven应用目录:

(1)bin:存放的是maven的指令;

(2)boot:存放类加载器框架;

(3)conf:存放配置文件;

(4)lib:存放第三方jar包;

1.3Maven的项目结构:

不同的集成开发环境,目录结构是不同的,对于Maven,其目录结构如下:

mvn_app //项目名
    --pom.xml //项目配置文件
    --src
        --main
            --java //源代码的根
                --com
                    --company
                        --app
                            App.java
            --resources:资源和配置文件的根 
        --test
            --java //测试代码的根
                --com
                    --company
                        --app
                            Test.java
            --resources:测试所需资源和配置文件的根

1.4maven使用概念

1.4.1仓库的使用

        仓库是用来存储jar文件以及各种资源的,比较全面的资源https://repo1.maven.org/maven2/

是全球中央仓库,可以获取到比较全面的jar包,而全球仓库的访问速度较慢,从而出现了中间仓库也就是私服,我们可以按需在私服上上传对应的资源,以便于更快捷的获取,其中关系如下:

1.4.2配置本地仓库

        打开Maven文件中的conf,打开其中的settings.xml配置文件,默认是在当前用户目录下的.m2目录->respository目录下,如果我们想自定义本地仓库的位置,那我们可以在settings.xml的<settings>标签中通过<localRepository>指定路径</localRepository>进行本地仓库位置的配置;

1.4.3镜像网站的配置

        如果我们想直接从中央网站中获取资源速度是比较慢的,但是如果我们通过国内的镜像网站如阿里云等那么访问速度就会变快很多,配置镜像网站也需要我们打开settings.xml,在<mirrors>标签下通过如下语句进行配置,我是以阿里云为例:

<mirror>
    <id>aliyunmaven</id>  //别名  
    <mirrorOf>central</mirrorOf>  //拦截的访问,拦截后跳转至指定网站
    <name>阿里云公共仓库</name> //备注名称
    <url>https://maven.aliyun.com/repository/public</url> //地址
</mirror>

1.4.4定位资源位置的坐标        

        定位仓库中资源的位置的三个属性:gav

groupId:组织名称、公司名称,通常写法是域名的倒写(com.baidu);

artifactId:项目模块名;

version:项目版本号;

通过这三个属性就可以精准定位项目的版本位置

1.4.5依赖

依赖查找的网站https://mvnrepository.com/,查找到之后在pom.xml进行依赖的加入:

<dependencies>
    <dependency>
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>
        <scope></scope>   //用于声明作用范围
    </dependency>
</dependencies>

1.5Maven生命周期

(1)clean:项目在编译之后,会生成target目录存储相应的class文件,clean指令就是存储之前编译过的数据;

(2)compile:编译指令:将java源文件编译成class文件存放在target/classes下面;

(3)test-complie:编译测试文件的,将src/test/java下的文件复制到target/test-classes目录下,如果之前没有编译,则自动执行compile;

(4)test:执行测试,拿到测试结果,生成测试报告,报告存储在surefire-reports目录下,有两种,一种是txt,另一种是xml(测试环境和结果);

(5)package:执行打包操作;

(6)install:执行安装,将生成的jar包存储到本地仓库中;

(7)deploy:执行部署操作,可以提交给服务器;

1.6三套项目构建周期:

clean:清理工作

        (1)pre-clean : 清理之前完成

         (2)clean:完成清理,移除上次构建的目录或文件

        (3) post-clean:clean之后要完成的工作

default:项目构建的核心工作 编译、测试编译、测试、打包、安装等

site:

        (1)pre-site:生成站点文档之前要完成的工作

        (2)site:生成项目站点文档

        (3)post-site:生成站点文档之后要完成的工作

        (4)site-deploy:将生成的站点文档部署在服务器上

2.Maven实操:

2.1idea中maven项目的部署

        通过idea创建maven项目,设置好maven主路径和用户设置文件,maven主路径就是我们安装maven时的根文件,而用户设置文件就是conf->settings.xml

右侧的Maven管理页面

我们可以在这里查看项目的插件,依赖,并且我们还可以在这里通过点击的方式运行生命周期工具,或者是插件如tomcat等;

2.2设置调整

        我们通过调整设置来指定默认的maven路径和配置文件路径

在这里配置完就应用确定就ok,这样我们每次创建maven项目都不用去调整路径了;

3.依赖:

3.1依赖的范围:

通过上面说到的scope来进行依赖范围的定制

主程序指的是参与主程序的编译和执行,测试程序指的是参与测试程序的编译与执行,打包就是打包后的jar会不会包含依赖

3.2依赖传递:

依赖分为直接依赖和间接依赖,直接以来就是指模块层级直接引入依赖,不存在嵌套关系,而简介依赖就是指模块依赖模块,而被依赖的模块内存在直接依赖;

3.2.1依赖冲突

        因为直接依赖和间接依赖的存在导致可能出现冲突的情况,即直接依赖和间接依赖出现了同一个依赖,但是版本上有所差异,这样就可能会导致出现依赖冲突;

        当依赖出现重复资源时,最短路径优先

        声明优先:当依赖资源路径相同时,配置顺序在前面的优先

特殊情况:在pom.xml文件中,同时依赖了一个资源的两个版本,取后者;

3.2.2可选依赖

比如说一个模块依赖另一个模块,然后被引用模块有一些不想暴露的依赖,那就使用optional来进行限制;

3.3拆分、聚合和继承

3.3.1聚合

在父模块中进行聚合的声明,然后再夫模块的pom.xml文件中对于重复的依赖进行配置,减少代码冗余

  <packaging>pom</packaging>
  <modules>
      <module>mvn_pro1</module>
      <module>mvn_pro2</module>
  </modules>

3.3.2继承

子模块的pom.xml文件

<parent>
<artifactId>mvn_parent</artifactId>
<groupId>com .xzit</groupId>
<version>1 .0-SNAPSHOT</version>
</parent>

父模块的pom.xml文件

<packaging>pom</packaging>

<!--配置子模块-->
<modules>
    <module>mvn_module1</module>
    <module>mvn_module2</module>
</modules>

<!--配置依赖管理,版本号可以在父工程中统一做配置-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <!--配置插件管理-->
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

4.自定义属性

        在pom.xml项目根级的配置文件中

5.配置文件和资源文件管理

src/main/java 目录下只有.java文件会被编译,放在target/classes下面,其他文件,默认情况下不会被放在target/classes目录下

需要在pom.xml的build元素下做配置

<resources>
    <!--配置在resources下面的资源文件,并可以读取pom.xml文件中的属性值-->
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
    <resource>
        <!--包含资源文件的目录-->
        <directory>src/main/java</directory>
        <!--要参与编译的资源文件-->
        <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
        </includes>
        <!--是否资源文件在pom.xml文件中做了配置并引用-->
        <filtering>false</filtering>
    </resource>
</resources>

总结:

        常见的pom.xml的标签:

                <dependencies>加<dependency>     声明项目需要的所有jar包

                <dependencyManagement>    在父工程统一管理依赖版本,子模块引用时可省略版本号

                <scope>在dependency中控制jar包的作用范围                

                <build>  配置编译、打包资源过滤等行为

                <plugins>  build内,配置构建过程中使用的插件

                <modules>  在父模块中配置其下层的子模块

                <properties>  定义变量,用于统一管理版本号或配置参数

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐