Maven——项目管理工具

本文介绍了Maven的基本概念,包括其作为基于POM的项目管理工具,资源加载原理,项目结构详解,以及POM模型中的依赖、继承和聚合关系。此外,还涵盖了Maven项目类型、常用插件配置和生命周期管理等内容。
摘要由CSDN通过智能技术生成

Maven的简单介绍

        Maven是使用Java语言编写基于项目对象模型(POM)的项目管理工具。使用Maven可以帮助我们在依赖管理项目构建插件使用上更好地管理项目。

Maven的加载原理

        Maven会根据pom模型去加载当前项目需要使用的资源。项目每次加载都是先从本地仓库(本机的某个指定的文件夹)去加载,如果没有的话就会去Maven的远程仓库中下载到本地仓库,最后Maven再去加载本地仓库中的资源。

Maven项目结构解释

每个目录解释说明如下:

ideamaven         // 项目名

.idea                  // IDEA中所有项目都会生成这个文件夹

src                     //当前项目的根目录

        main

                java                   //所有的.java源文件存放位置

                resource           //除了.java文件,其他类型的文件都放入到此目录。在进行编译的时候会将该文件中的所有内容直接放到classes目录         

        test

                java                  // 编写的所有测试类都放在此目录

ideamaven.iml           // IDEA配置文件,IDEA中项目都会生成这个文件

pom.xml                    // Maven最重要的文件,可以进行依赖引入、配置插件等操作

External Libraries         //存放当前项目所有依赖的jar

POM模型中的几种关系

        在POM模型中定义了三种关系:依赖、继承、聚合。而Maven基于POM模型的项目管理工具,所以这三种关系在Maven中都存在。

依赖关系

        当一个项目需要使用到其他项目的内容时,就可以使用依赖。只要依赖的项目(可以是自己的项目,也可以是开源项目)存在于本地仓库,就可以通过pom.xml的<dependency>标签填写坐标实现依赖关系。

依赖的传递性

        假设项目A依赖项目B,项目B依赖项目C,这时会发现项目A中包含了项目C的依赖,这就是依赖的传递性。

重复依赖原则

路径不同间接依赖中maven采用的是路径最短者优先。

路径相同间接依赖中maven采用的是依赖定义顺序从上到下,下边优先级更高。

继承关系

      继承下项目分为父子关系。父项目的<packing>打包方式可以为jar|pom,无论是jar还是pom,子项目只能继承父项目的pom.xml,并不能继承src/main下的内容,所以通常使用pom。

        在父项目中可以通过<dependencyManagement>管理父项目中的依赖,子项目则可以指定继承那些依赖,当子项目需要这个依赖时坐标<version>可以省略。

如何区分依赖和继承关系
  • 如果想要使用另一个项目的类,这种关系在Maven中叫做依赖。

  • 如果想要使用另一个项目的依赖,插件,这种关系在Maven中叫做继承。

 聚合关系

        聚合关系的前提:继承。

        聚合主要用在分布式架构或微服务架构的项目。聚合项目最大的好处:在一个父项目中创建多个模块,所有的模块都是独立的,可以独立运行。且父项目不需要install,子模块就可以继承父项目的pom中的依赖。

总结

  1. 依赖:

    1. 依赖其它项目中的类,主要是src/main中的类。

    2. 依赖和被依赖的项目都为独立的项目,依赖存在传递性,常用。

    3. 项目必须install后(jar),才能够被其他项目依赖。

  2. 继承:

    1. 父项目管理子项目的依赖,插件。

    2. 父子项目都为独立的项目,springboot开始常用。

    3. 项目必须install后(jar|pom),才能够被其它项目继承。

    4. 无论jar还是pom只能继承依赖,不能使用src/main中的类,常用pom。

  3. 聚合:

    1. 父项目管理子项目的依赖,插件。

    2. 一个项目中创建多个模块(每个模块可以独立运行),微服务常用。

    3. 聚合项目不需要install,每个模块都可以使用父项目中依赖,插件

    4. 聚合项目只能为pom,聚合的父项目需要指定管理哪些子项目。

Maven项目的类型

Mavne项目有三种类型:

        jar:相当于使用idea创建的java项目。打包主要打包.class文件。

        war:web项目类型。打包时除了src中内容,还会包含webapp目录,要比jar类型文件打包的内容更多。通常使用tomcat时项目类型必须指定为war。

        pom:聚合项目中使用。聚合项目中如果一个项目为父项目,项目类型应该为pom类型。当项目类型为pom类型时,表示该项目除了会配置pom.xml以外不会有任何其它类或资源文件。

        后续可以通过在pom.xml文件中通过<packaging>设置项目类型。没有配置<packaging>时默认使用jar。

一些Mybatis常用插件

1.资源拷贝插件

        存在某种情况:由于一些原因,必须在src/main/java中放置一些非.java文件(例如:MyBatis框架中就有这样的场景),还希望Maven去编译这些文件,这时就必须配置资源拷贝插件。

如何配置资源拷贝插件

<build>里面可以配置一些插件信息。

<directory>配置的目录。

<includes> 标签明确配置哪些文件也需要被编译。**/*.txt**表示任意目录及子目录。 *.txt表示任意名称的txt文件。如果希望编译其他类型的文件,例如xml文件,需要在<includes>里面再配置<include>**/*.xml</include>就可以了。

<filtering>表示是否对拷贝的资源进行过滤。简单理解:对资源内容进行处理。例如:在文件中有{占位}编译后希望被解析,就需要设置为true。

2.tomcat插件热部署

        使用Maven的Tomcat插件可以实现把项目一键部署到服务器的Tomcat中,这种部署方式不需要重启Tomcat,称为热部署。

        想要使用热部署就必须先配置Tomcat自带的manager项目。Manager项目支持可视化管理Tomcat中项目,也知道使用命令管理Tomcat中项目。

修改tomcat插件配置

        在配置好Tomcat的远程账号和密码以及角色信息后,Tomcat不能关闭,保持运行状态。在需要远程部署的Maven的项目的pom.xml文件配置远程部署的账号密码以及url地址。

<!--配置插件-->
<build>
<plugins>
  <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
      <!-- 域名也可以 -->
      <url>http://192.168.8.129:8080/manager/text</url>
      <username>admin</username>
      <password>admin</password>
      <path>/project</path><!-- 发布到Tomcat的名称,也是以后访问的名称 -->
    </configuration>
  </plugin>
</plugins>
</build>

Maven项目的常用指令

mvn help:system打印系统属性和环境变量
mvn clean删除target目录,清理所有之前所有编译的内容。手动删除target目录和运行此命令是等效的。
mvn validate验证项目是否可用
mvn compile编译项目,生成target目录
mvn test执行测试。执行测试时会自动运行src/test/java 目录下所有/*Test.java、/Test.java、**/TestCase.java 文件,采用约定方式执行。
mvn package打包项目
mvn deploy发布项目
mvn verify校验包是否正确
mvn install安装到本地仓库
mvn site生成站点。但是需要添加插件才能使用。

Maven项目的生命周期    

  Maven有三套相互独立的生命周期(Lifecycle ):

  • Clean Lifecycle:做一些清理工作;

  • Default Lifecycle:构建的核心部分、编译、测试、打包、部署等;

  • Site Lifecycle:生成项目报告、站点、发布站点;

其中Default Lifecycle包含如下阶段:

  • validate - 验证项目是否正确并且所有必要的信息都可用

  • compile - 编译项目的源代码

  • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码

  • package - 将编译后的代码打包成可分发的格式,例如 JAR。

  • verify - 对集成测试的结果进行任何检查,以确保满足质量标准

  • install - 将包安装到本地存储库中,作为本地其他项目的依赖项

  • deploy - 在构建环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享

        生命周期的每个阶段必须按照严格的执行顺序,当然我们可以执行任意一个阶段,但是每个阶段都会从第一个阶段开始执行

scope

        在pom.xml中<dependency>标签有一个<scope>子标签,表示当前依赖的域(域:有效范围)。

scope可取值

取值解释
compile默认值,不配置scope时的取值,表示依赖参与整个项目的编译、打包、测试、发布。也就是说:编译时需要使用、测试时需要使用、最终打包时会包含。属于一种强依赖。
provided仅编译时生效,项目最终被打包时不会包含该依赖。常见servlet的依赖时需要配置。
runtime运行时生效。表示编译时不参与,但是参与项目的测试、打包。该依赖被打包时会被包含。
test仅测试时生效,这个包中的类只能在src/main/test中使用。常用在junit依赖时需要被配置。
system类似provided,但是需要结合systemPath属性,表示依赖不是来源于本地库,而是来源于其他目录。使用较少,在一些特殊项目中才可能被使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值