首页 > 其他分享 >Maven基础知识

Maven基础知识

时间:2023-08-21 21:23:09浏览次数:53  
标签:maven 依赖 项目 基础知识 Maven pom mvn

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>

标签:maven,依赖,项目,基础知识,Maven,pom,mvn
From: https://www.cnblogs.com/smallzengstudy/p/17647117.html

相关文章

  • 项目部署_通过Shell脚本自动部署项目(操作步骤说明、安装git和maven)
          ......
  • 强制更新Maven依赖
    1.问题来源使用Eclipse建立新的Springboot项目,一直报错,提示"Description Resource Path Location TypeArchiveforrequiredlibrary:'E:/.m2/maven-repository/org/springframework/boot/spring-boot-starter-logging/2.4.6/spring-boot-starter-logging-2.4.6.jar'inpro......
  • 001 DDR基础知识(一)存储器分类
    1内存     内存(Memory)指的是内存存储器,又称为主存,是CPU用来直接寻址和存储的空间,它相当于一座桥梁,用以负责诸如硬盘、主板、显卡等硬件上的数据与处理器之间数据交换处理,我们可以把内存看作数据缓存区,一个高速的缓存区。内存之所以称为内存,是相对于硬盘这些外存而言,我们......
  • 学习 ChatGPT 一切基础知识的绝佳资源
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景OpenAI,ChatGPT,GPT系列和大型语言模型(LLM)一般-如果你与人工智能专业或技术专家有远程联系,你很有可能会在几乎所有的商业对话中听到这些词这些天。炒作是真实的。我们不能再称它为泡沫了。毕竟,这一次,炒作正在兑现其承......
  • 【数据库】MySQL的一些基础知识
    ALTERTABLE表名DROP属性名删除数据表DROPTABLE数据库名.表名;用户管理创建用户CREATEUSER'username'@'host'IDENTIFIEDBy'password';username:欲创建用户的用户名password:用户密码host:主机地址,例如localhost、192.168.1.1用户删除DROPUSER'username'@......
  • XXE漏洞--xml基础知识
    一、XML基础知识可以用于配置文件、交换数据要求:XML文档必须有根元素XML文档必须有关闭标签XML标签对大小写敏感XML元素必须被正确嵌套XML属性必须加引号DTD(DocumentTypeDefinition)文档类型定义自动校验格式内容,元素ELEMENT校验实体ENTITY定义字符或值,相当于全局变......
  • # yyds干货盘点 # Pandas实战——灵活使用pandas基础知识轻松处理不规则数据
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个pandas数据合并处理的问题,一起来看看吧。他的原始数据如下所示:然后预期的结果如下所示:二、实现过程这里【瑜亮老师】给了一个指导如下:原始数据中包含所有所需的信息,但是因为源系统导出的格式问题,有些数据被分配到......
  • JAVAEE基础知识
    JAVAEE基础知识2018年3月,开源组织Eclipse基金会宣布,JavaEE(EnterpriseEdition)被更名为JakartaEE,也就是9版本后改名JakartaEE,也就是JakartaEE9。JavaEE(JavaPlatform,EnterpriseEdition)是sun公司(2009年4月20日甲骨文将其收购)推出的企业级应用程序版本。这个版本以前称为J2EE......
  • SSM框架整合Maven版
    简单介绍一下SSM具体指的是SpringMvc、Spring、Mybatis或者MybatisPlus这三大框架,其中Spring是最核心的框架,其他两个框架都要集成在Spring上让其进行统一管理。由于整合过程中需要导入很多jar包所以为了方便管理使用项目管理工具Maven来进行依赖jar包的管理,需要什么jar包就导入什么......
  • 【Maven】打包补充依赖的操作记录
    题外话每次搞maven环境,总是觉得很痛苦,痛苦的根源源于,无从下手。要说maven有多难,自然也不能这样说,究竟也是因为没有系统地去学习,和没有把踩过的坑积累成经验,以至于每一次都踩差不多的坑,浪费相当的时间,打击相当的信心,于是觉得这是一道铜墙铁壁。每每遇到这些环境问题,首先就觉得,......