Maven基础知识

Maven基础知识

1、简介

1、Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以2、常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
3、四大特性:依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制
4、groupId一般是填写公司名 ,artifactId一般填写项目名,一般是以项目名为前缀,比如spring-MvcWeb,version就是版本号。

2、环境安装

1、检查JDK版本:JDK版本在1.7及其以上。
2、在https://maven.apache.org/download.cgi下载Maven项目。
3、配置系统环境,在高级系统环境中创建一个MAVEN_HOME变量(以bin目录为值),把变量加载到path路径下。
[注]存放的路径不要是中文和空格
4、dos窗口中用mvn -v查看环境是否配置成功。
5、由于第一次加载会比较慢,要在maven项目setting.xml文件中配置阿里仓库镜像和本地仓库地址。
  阿里镜像:
    <mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
  本地镜像地址:
 <localRepository>E:/maven/mvn_factory</localRepository>
 6、关于版本的基本介绍
 Version: x.x.x-里程碑
 第一个x表示大版本,有重大变革。
 第二个x表示小版本,修复bug,增加功能。
 第三个x表示更新。
 里程碑版本:
 SNAPSHOT:开发版
 alpha:内部测试
 beta:公开测试
 Release|RC:发布版
 GA:正常版本
 推荐在pom文件中使用name标签为每个文件声明一个项目名称,以便方便信息交流。

3、手动创建Maven项目

1、手动创建项目路径:maven项目中目录结构:
--项目名
   --src
      --main
        --java:存放JAVA代码的包
        --resources:存放资源文件
      --test
        --java:编写测试环境的包
        --resources:存放测试环境的资源文件
   --pom.xml:编写maven依赖的文件
2、cmd进行项目名目录下
   一、编译java文件
    mvn compile
   二、执行main方法
   mvn exec:java -Dexec.mainClass="com.zwf.demo.Hello"(java文件的全路径文件名)
  • pom.xml模板
<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.zwf</groupId>
  <artifactId>test</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>
  <name>Plexus Classworlds</name>
  
  <properties>
    <javaVersion>8</javaVersion>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

4、Maven命令

mvn [plugin-name]:[goal-name]
命令代表的含义:执行plugin-name插件的goal-name目标
  • 常用命令
命令 描述
mvn -version 显示版本信息
mvn clean 清理项目生产的临时文件,一般是模块下的target目录
mvn compile 编译源代码,一般编译模块下的src/main/java目录
mvn package 项目打包工具,会在模块下的target目录生成jar或war等文件。
mvn test 测试命令,或者执行src/test/java下junit的测试用例
mvn install 将打包的jar/war文件复制到你的本地仓库中,提供其他人员进行下载依赖
mvn deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn site 生成项目相关信息的网站
mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树
mvn run:tomcat7 在tomcat服务器中运行项目文件

注意:运行mvn命令时要在pom.xml路径下执行!

mvn package -Dmaven.test.skip=true 表示在打包时跳过测试环境。
mvn -Pdev -Dmaven.test.skip=true 表示在dev环境下发布时跳过测试环境。

5、IDEA配置自定义Maven环境

image-20230820213501397

  • IDEA创建JAVA maven项目

image-20230820214220447

  • 自定义Maven命令

image-20230820214527106

  • IDEA创建web Maven项目

image-20230820214830568

  • jetty和tomcat插件的区别
   Jetty的架构比Tomcat的更为简单Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
    Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
    Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。

   Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高
   Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
  • 在pom.xml文件中引入jetty插件
<build>
    <plugins>
    <plugin>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>maven-jetty-plugin</artifactId>
      <version>6.1.25</version>
      <configuration>
        <connectors>
          <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
            <port>9000</port>
            <maxIdleTime>60000</maxIdleTime>
          </connector>
        </connectors>
        <contextPath>/</contextPath>
        <scanIntervalSeconds>0</scanIntervalSeconds>
        <stopKey>stop</stopKey>
        <stopPort>9001</stopPort>
      </configuration>
    </plugin>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.19.1</version>
      <configuration>
        <parallel>methods</parallel>
        <threadCount>10</threadCount>
      </configuration>
    </plugin>
</plugins>

</build>
  • Tomcat7插件
   <build>
       <plugins>
<!--Tomcat7插件-->
          <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
              <port>9999</port>
              <path>/</path>
              <uriEncoding>UTF-8</uriEncoding>
              <server>tomcat7</server>
            </configuration>
          </plugin>
        </plugins>
      </build>

6、资源拷贝插件

Maven项目下,默认只编译src/main/java中的java文件以及resource目录下的配置文件,如果需要让java和配置文件以外的文件进行编译,就需要引入拷贝插件,比如mybatis项目中。
  • 模板格式
<build>
<!--引入资源拷贝插件-->
         <!--编译java文件时,包括txt文件都要进行编译。-->
      <resources>
          <resource>
              <directory>src/main/java</directory>
              <includes>
                  <include>**/*.txt</include>
              </includes>
          </resource>
          <!--编译资源文件时,包括txt、xml、properties文件都要进行编译。-->
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>**/*.txt</include>
                  <include>**/*.xml</include>
                  <include>**/*.properties</include>
              </includes>
          </resource>
      </resources>
      </build>

7、生命周期

maven有三套生命周期:
1、清理target文件夹生命周期。(clean)
2、发布项目生命周期。(validate-->compile-->test-->package-->verify-->install-->deploy)
3、生成站点信息生命周期。(site)
如果要使用发布项目生命周期的任何一个阶段,不光是执行这个阶段,会把这个阶段以前的所有阶段进行执行一遍。

image-20230821103135492

  • 要使用生成站点信息操作,要引入以下插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version>
</plugin>
</plugins>
</build

8、Scope作用域标签

image-20230821103521427

Scope作用域是针对每个jar包依赖,在哪个时间段执行。通俗点讲,compile作用域是整个阶段都生效(不编写scope标签默认是compile),provided作用域是在编译时生效,runtime作用域是只在运行时生效,test作用域是只在测试环境下生效,system要结合systemPath属性使用,表示依赖不是来源于本地库,而是来源于其他目录。

9、Maven项目关系(项目与项目关系)

  • 依赖关系
maven项目中有三个关系:依赖(普通maven项目)、继承(springboot项目)、聚合(springcloud项目)
1、如果要依赖第三方组件,只需要直接在pom.xml文件中导入依赖(<groupId>等标签)。
2、如果要依赖本地项目,要先把本地项目进行安装发布到本地仓库(mvn install),再在pom.xml文件中导入依赖。
3、依赖具有传递性:A依赖B,B依赖C,最终A会依赖C。A->B->C
4、如果依赖重复引入,会应用最短路径,哪个依赖路线离项目近就使用哪个依赖。
   如果重复项目依赖路径相同,由配置在pom.xml文件引入顺序决定,在前面引入的优先使用。
5、实际开发中一般引入项目依赖会排除重复依赖。
     <exclusions>
        <exclusion>
          <groupId></groupId>
          <artifactId></artifactId>
        </exclusion>
      </exclusions>

image-20230821105043776

  • 继承关系
1、如果多个项目要引入共同项目依赖,一般使用继承关系,父项目打包类型可以是pom、jar、war类型,但是由于继承关系只使用父类的依赖包,所以一般父项目的打包方式是pom类型。 
2、子项目要引用父项目依赖时,必须先install安装发布到本地仓库,再在pom.xml文件中引入父项目依赖。
3、子项目引入父项目的代码格式(pom.xml):
<parent>
父项目依赖
</parent>
  • 选择性继承
1、maven默认会引入父项目的所有依赖包,如果项目比较大,不使用依赖包引入,会让项目变得更加冗余,所以我们可以选择需要的依赖进行继承。
2、使用方式:
一、先在父项目的pom文件中dependencies标签外嵌套一层dependencyManagement标签。
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  </dependencyManagement>
二、在子项目的pom文件中引入父项目所需要的依赖,不用加版本号和作用域,会自动继承父项目依赖,保持版本一致性。
  • 继承关系与依赖关系的区别:
1、继承关系和依赖关系,前提父项目都要发布到本地。
2、依赖关系是使用父项目的JAVA代码,只能把父路径的打包方式设置为jar。(<packaging>jar</packaging>)
3、继承关系是使用父项目的依赖,打包方式虽然都可以设置,一般父项目中不写JAVA代码,一般设置为pom。(<packaging>pom</packaging>)
4、项目与项目之间只有单继承,如果重复继承会被覆盖。
  • 聚合关系
1、聚合关系的前提必须是继承关系,聚合关系不用使用install安装发布到本地,聚合关系实际上是在一个父工程中添加多个子工程,不用来回切换页面进行代码编写,在同一个页面中可以编写子工程代码。
2、父工程的pom.xml文件中配置如下:
 <!--聚合关系-->
  <modules>
    <module>SPro1</module>
    <module>SPro2</module>
  </modules>
posted @ 2023-08-21 21:15  戴莫先生Study平台  阅读(54)  评论(0编辑  收藏  举报