Maven

本文详细介绍了Maven的安装、仓库管理、常用命令、项目构建过程、坐标概念、依赖管理以及Eclipse和IntelliJ IDEA中的集成。通过Maven,开发者可以便捷地管理项目依赖,构建项目,并在IDE中无缝使用Maven功能。
摘要由CSDN通过智能技术生成

Maven

1 简介

介绍

  • Maven这个词翻译为(”专家”,”内行”),是跨平台的项目管理工具。
  • Maven主要服务于基于Java平台的项目构建,依赖管理,项目信息管理,它是基于项目对象模型(POM)的概念

1 项目构建的过程

【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。

image-20211125202138136

2 依赖管理

​ 依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。

2 安装Maven

1.确保电脑上安装了JDK,并且JDK环境变量配置正确
2.下载Maven
	http://maven.apache.org
3.解压(注意:不要解压到中文目录)
4.配置环境变量
​	(变量名 M2_HOME		变量值 Maven的安装目录)
​	(变量名 path			变量值 Maven的bin路径)
5.在cmd中输入 mvn -v 显示出了maven 的版本,就代表maven软件安装成功了。

image-20211125192601054

maven解压后的目录结构

image-20211125202554159

bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
conf:含有settings.xml配置文件
lib:含有Maven运行时所需要的java类库

3 Maven的仓库

1 何为Maven仓库

以前传统的开放模式中,每个项目都有lib目录,各个项目lib目录下的内容存在大量的重复,这样不仅造成磁盘空间的浪费,而且也难 于管理。
Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)

在maven中存放jar包的文件夹称为仓库,仓库一般放在本地磁盘。

2 仓库的分类

  • 对于Maven来说,仓库只分为两类:本地仓库和远程仓库。
  • 当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果 本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,Maven就会去远程仓库查找,发现需要的构件,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven就会报错。(孝明上次那个问题)
  • 私服是一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。

image-20211125202952574

  • 本地仓库

    • ​ 默认情况下,本地仓库地址为C:\Users\用户名.m2\repository\,有时候,因为某些原因(C盘空间不够,系统盘),需要自定义本地仓库的目录地址
  • 远程仓库

    • 当用户执行maven命令之后,Maven会根据配置和需要从远程仓库下载构件到本地仓库。

    • 这好比藏书,例如我要读<红楼梦>,会先检查自己的书房是否藏了这本书,如果发现没有这本书,于是就跑去书店买一本回来,放在书房里。

    • 本地仓库就好比书房,我需要读书的时候先从书房找,相应的,Maven需要构件的时候,先从本地仓库找。当无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件到本地仓库。

  • 私服

    • ​ 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果 私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
  • 仓库搜索服务

    • ​ 使用Maven开发项目时,经常需要寻找依赖,我们可能只知道使用的类库的项目名称,但添加Maven依赖要求提供确切的Maven坐标。这是就可以使用仓库搜索服务来根据关键字得到Maven坐标。
    • 地址:http://mvnrepository.com/

3 本地仓库配置

1.在某个盘符下新建一个英文文件夹作为我们的maven本地仓库

2.修改Maven->conf->settings.xml(自定义Maven的本地仓库路径)

image-20211125192806169

3.把第53行代码复制到注释的外面,把路径改成我们刚才创建的文件夹路径

image-20211125192855890

4.在settings.xml文件的第146-159行配置Maven的中央仓库的镜像为阿里的镜像,配置代码如下

image-20211125193324117

	<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
	</mirror>

4 Maven常用命令 (了解)

mvn clean是 maven 工程的清理命令  
   会对target目标目录所有的内容进行删除
mvn compile是maven工程的编译命令
   对maven项目中的所有的位于 src/main/java 下的文件编译为 class 文件输出到 target目录下
mvn test 是 maven 工程的测试命令
   会执行位于 src/test/java 下的单元测试类 [自动编译测试类所有@Test单元测试方法]
mvn  package是maven工程打包的打包命令
   对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包 放在target目录中
mvn install 是maven工程的安装命令
   将package打成jar包放到本地仓库中,供其他项目的添加dependency依赖,就可以使用了

注意:

从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行

Maven命令的执行是有顺序的,每执行一个命令,都会从第1个clean命令开始执行

1 Maven自动构建java project项目

使用mvn archetype:generate创建项目,命令如下所示:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

image-20211125205045681

Maven工程目录结构

image-20211125194638466

2 执行:mvn package 打包命令

image-20211125205452101

package构建成功后,会在target目录下生成myapp-1.0-SNAPSHOT.jar包

image-20211125205524331

3.执行 mvn install 安装命令

image-20211125205622162

install构建成功,就会将项目的jar包安装到本地仓库,如下图。

image-20211125205659432

5 Maven坐标

什么是坐标?

​ 在平面几何中坐标(x,y)可以标识平面中唯一的一点。

为什么要定义Maven坐标?

​ 在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的。在这个基础上,其他Maven项目才能应用该项目生成的依赖。

Maven坐标详解

groupId:组织标识(包名)
artifactId:项目名称
version:项目的当前版本
packaging:项目的打包方式,最为常见的jar和war两种,默认jar

样例

image-20211126110258304

6 依赖管理

依赖管理是Maven一个主要的功能,由传统的项目中jar包管理到Maven仓库形式管理,多个项目共享同一依赖。

依赖配置

image-20211126110530877

详解每个依赖可以包含的元素:

groupId,必选,实际隶属项目 (基本坐标)
artifactId,必选,其中的模块 (基本坐标)
version必选,版本号 (基本坐标)
type可选,依赖类型,默认jar
scope可选,依赖范围,默认compile
optional可选,标记依赖是否可选,默认false
exclusion可选,排除传递依赖性,默认空
大部分依赖声明只包含基本坐标。

依赖范围

maven项目有三种classpath(编译,测试,运行)
scope用来表示与classpath的关系,总共有五种
compile:编译,测试,运行
test:测试
provided:编译,测试
runtime:运行
system:编译,测试,同provided,但必须指定systemPath,慎用

依赖范围有效运行期:

image-20211126110653504

可选依赖

  • 有时候我们不想让依赖传递,那么可配置该依赖为可选依赖,将元素optional设置为true即可,例如:

image-20211126111130076

  • 那么依赖该项目的另一项目将不会得到此依赖的传递。

排除依赖

  • 当我们引入第三方jar包的时候,难免会引入传递性依赖,有些时候这是好事,然而有些时候我们不需要其中的一些传递性依赖。如当我们引入spring包时,我们不想引入传递性依赖commons-logging,我们可以使用exclusions元素声明排除依赖,exclusions可以包含一个或者多个exclusion子元素,因此可以排除一个或者多个传递性依赖。

image-20211126111248965

依赖归类

  • 如果我们项目中用到很多关于Spring Framework的依赖,它们分别是org.springframework:spring-core:2.5.6, org.springframework:spring-beans:2.5.6,org.springframework:spring-context:2.5.6,它们都是来自同一项目的不同模块。因此,所有这些依赖的版本都是相同的,而且可以预见,如果将来需要升级Spring Framework,这些依赖的版本会一起升级。因此,我们应该在一个唯一的地方定义版本,并且在dependency声明引用这一版本,这一在Spring Framework升级的时候只需要修改一处即可。

image-20211126111353546

7 Eclipse集成maven

1 集成

1.Window->Preferences->Maven->Install…->add->选择本地的maven安装路径

2.Window->Preferences->Maven->User settings->修改为Maven的配置文件(settings.xml)路径

2 创建Maven项目(普通项目和web项目)

image-20211126111827625

使用Maven创建普通java项目

image-20211126111852182

使用Maven创建普通javaWeb项目

image-20211126111910165

image-20211126111916413

1.修改项目的默认的jdk版本

在项目的pom.xml文件中加如下内容

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

项目上鼠标右键->Maven->update Project

项目上鼠标右键->properties->java builder path->

查看jdk版本是否正常

2.如果创建的是web项目,需要把tomcat加载到项目中

image-20211126112026789

image-20211126112040041

标准的Maven项目格式

image-20211126114049093

8 IntelliJ Idea集成Maven

a、IDEA配置Maven

file->Setting->在搜索框搜索Maven

image-20211126144337947

b、创建普通java项目和web项目

image-20211129190550127

image-20211126145757105

image-20211129190941209

maven生成的web项目结构如下

image-20211129191237450

上图的结构并不是一个完整的maven工程结构,需要手动补齐

c、创建并配置源码目录

在main目录上右键

image-20211129191331923

image-20211129191354304

image-20211129191406840

将main下的java目录设为源码的根目录

在java目录上右键

image-20211129191449981

image-20211129191559460

d、创建resources静态文件目录

在main目录上右键

image-20211129191650574

image-20211129191747787

image-20211129191800781

将main下的resources设为静态文件根目录

image-20211129191828879

image-20211129191901554

e、maven创建的web工程完整结构如下

image-20211129191946601

f、设置pom

添加jsp与servlet支持jar坐标

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

在maven中有一个tomcat插件,可以代替我们自己安装的tomcat,并且速度更快,只需要在pom中设置即可

<build>
    <!--配置mavenxyna插件版本-->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <target>1.8</target>
          <!-- 源代码使用的开发版本 -->
          <source>1.8</source>
          <!-- 需要生成的目标class文件的编译版本 -->
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <!--maven tomcat插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration> <!--请求路径-->
          <path>/</path> <!--指定端口-->
          <port>8080</port> <!--配置tomcat插件编码格式-->
          <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>
    </plugins>
  </build>

发布项目

方式一

image-20211129193430315

方式二

image-20211129193444395

image-20211129193454396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值