Maven快速上手 Maven初学者必看 Maven基本使用步骤 IDEA中使用Maven

Maven

一、使用Maven的原因

  1. 如果项目非常庞大,就不适合使用package划分模块,Maven可以将一个项目拆分成多个工程
  2. 使用Maven可以将jar包保存到仓库中,使用时直接从仓库中取即可,无需复制粘贴jar包
  3. 所有知名jar包都已经放在了Maven的仓库中,无需自己去网上寻找
  4. 使用Maven会将一个jar包依赖的jar包自动导入

二、Maven介绍

Maven是Apache的一款开源的项目管理工具,以后创建的无论是JavaSE还是JavaEE项目,都创建成为Maven项目;在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的;关系包含了:依赖、继承、聚合,使用Maven项目可以更加方便的实现导入jar包、拆分项目等效果

三、Maven的下载与安装

  1. Maven的下载地址:http://maven.apache.org/

在这里插入图片描述

  1. Maven的安装

(1) 将下载后的zip解压后得到

在这里插入图片描述

(2) 在conf目录下的settings.xml中修改

① settings标签中添加

<localRepository>E:\maven_localRepository</localRepository>

标签中的内容表示存放jar包的本地仓库在磁盘中的位置(可自行创建一个文件夹指定)

如果不指定,本地仓库默认路径:C:\Users[当前登录的用户名].m2\repository

② settings标签中的mirrors标签中添加

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

表示联网从远程仓库下载jar包时,使用阿里的镜像,使用官方地址下载速度很慢

③ settings标签中的profiles标签中添加

<profile>
	<!-- 告诉maven我们用jdk1.8 -->
	<id>jdk-1.8</id>
	<!-- 开启JDK的使用 -->
	<activation>
		<activeByDefault>true</activeByDefault>
		<jdk>1.8</jdk>
	</activation>
	<properties>
		<!-- 配置编译器信息 -->
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	</properties>
</profile>

当运行环境有多个JDK时,需要指定JDK,此处指定为JDK8

  1. Maven的环境变量配置

在这里插入图片描述

在这里插入图片描述

配置之后在控制台输入mvn -v检查是否安装成功(出现jdk版本及maven版本表示安装成功)

在这里插入图片描述

三、Maven仓库的介绍

1. 远程仓库

(1) 中央仓库

地址:https://mvnrepository.com/

联网下载jar包时默认从中央仓库中下载,如图:

在这里插入图片描述

(2) 中央仓库镜像

分担中央仓库的流量,之前配置的阿里镜像即中央仓库镜像

(3) 私服仓库

公司内部在局域网搭建的Maven仓库,公司内部使用

2. 本地仓库

远程仓库下载后的jar包存放在本地仓库中,之前已配置路径

3. 仓库优先级

在这里插入图片描述

四、Maven坐标的介绍

在这里插入图片描述

五、Maven工程类型

  1. POM工程

POM工程是逻辑工程,用在父级工程或聚合工程中,用来做jar包的版本控制

  1. JAR工程

将会打包成jar,用作jar包使用,即常见的本地工程 —> Java Project

  1. WAR工程

将会打包成war,发布在服务器上的工程

六、IDEA中使用Maven

  1. IDEA中配置Maven

在这里插入图片描述

  1. IDEA中创建Maven项目

在这里插入图片描述

  1. Maven项目的目录结构介绍

src
包含了项目所有的源代码和资源文件,以及项目相关的其他文件

src/main/java
这个目录下储存java源代码

src/main/resources
储存主要的资源文件,比如xml配置文件和properties文件

src/test/java
储存测试用的类,比如JUNIT的测试一般就放在这个目录下面

src/test/resources
可以手动创建一个文件夹,储存测试环境用的资源文件

pom.xml
是Maven最重要的配置文件,可以配置项目和项目之间的关系、导入jar包等

target
与src同等级,编译后的内容放置的文件夹(目前没有编译,所以没有此结构)

产生方式:

在这里插入图片描述

注意:点击install时可能会出现警告

在这里插入图片描述

解决方法:
在pom.xml中添加:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

七、Maven工程的关系

1. 依赖关系

A工程开发或运行需要B工程支持,则代表A工程依赖B工程

通俗理解为,依赖关系就是导入jar包,B工程可以是自己项目install之后的jar包,也可以是 仓库中的jar包

注入依赖的方法:在pom.xml中配置:

在这里插入图片描述

过程:先在本地仓库中找,如果找不到,联网去远程仓库中找,下载到本地仓库后导入,结果:

在这里插入图片描述

依赖的好处:

(1) 编程人员无需手动添加jar包,直接在pom.xml中配置即可,将依赖的dependency配置 删除,项目自动的将对应的jar包删除

(2) 可以解决jar包冲突问题,如果导入了不同版本的相同jar包,项目中不会出现两个jar 包,自动的保留其中的一个

① 依赖的特性和原则

(1) 特性

Maven项目1依赖了jar1,Maven项目2依赖了Maven项目1,则Maven项目2中也 会将jar1导入进来,可以直接使用项目1依赖的jar1

项目1依赖项目2的方法与依赖jar包方式一致,配置项目install之后的坐标即可

(2) 原则

i. 最短路径优先原则

例如,假设A、B、C之间的依赖关系是A->B->C->D(2.0) 和 A->E->(D1.0),那么D(1.0) 会被使用,因为A通过E到D的路径更短
ii. 最先声明优先原则

在依赖路径长度相等的前提下,在pom.xml中依赖声明的顺序决定了谁会被解析使 用,顺序最靠前的那个依赖优先使用

② 排除依赖

A依赖B,B依赖C,C依赖mybatis.jar,在A中排除C中的mybatis.jar

<!-- 项目A的pom.xml中编辑 -->
<dependencies>
    <!-- 依赖项目C -->
    <dependency>
        <groupId>com.qizegao</groupId>
        <artifactId>MavenDemo</artifactId>
        <version>1.0-SNAPSHOT</version>

        <!-- <exclusions>中可以使用多个<exclusion> -->
        <exclusions>
            <exclusion>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <!-- 不写版本号 -->
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

③ 依赖范围

依赖范围决定依赖的jar包什么情况下有效,什么情况下无效

依赖范围使用方式:

在这里插入图片描述

依赖范围分类:

compile
这是默认范围,如果没有指定,就会使用该依赖范围,表示该依赖在编译和运行时都生效

provided
编译和测试项目的时候需要该依赖,但在运行项目的时候,不生效

runtime
编译时不需要生效,而只在运行时生效

system
依赖范围与provided类似,使用system范围依赖时必须通过systemPath标签显式地指定依 赖文件的路径

test
只在编译测试代码和运行测试的时候需要,项目的正常运行不需要此类依赖

import
import必须声明在pom.xml配置文件中的标签中,指定jar包的 版本号

2. 继承关系

将父工程声明为POM工程,子工程默认会导入父工程依赖的jar包
(使用dependencyManagement标签管理所有jar包,控制jar包的版本)

<groupId>com.qizegao</groupId>
<artifactId>ParentMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包类型,默认是jar -->
<packaging>pom</packaging>

<!-- 管理所有jar包,使用dependencyManagement标签表示不会引入这些jar包,仅管理 -->
<!-- 使用properties标签和${}控制版本 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <!-- 使用properties标签中的版本号 -->
            <version>${name}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<properties>
    <!-- 此标签可任意起名 -->
    <name>3.5.6</name>
</properties>

声明一个子工程继承于上述工程

<!-- parent标签指定父工程 -->
<parent>
    <groupId>com.qizegao</groupId>
    <artifactId>ParentMaven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 以下标签声明父工程的pom.xml文件所在的位置 -->
    <relativePath>../ParentMaven/pom.xml</relativePath>
</parent>

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <!-- 无需声明版本号,继承父工程的版本号,父工程可以控制子工程的版本号 -->
        <!-- 子工程可以使用version标签指定版本号而不使用父工程的版本号 -->
    </dependency>
</dependencies>

注意:如果父工程使用了import依赖范围,则子工程必须使用父工程指定的版本号

3. 聚合关系

当开发的工程拥有多个模块 (每个模块都是一个独立的项目) 时,需要使用聚合工程

聚合工程的总工程 (最上层的父工程) 必须是一个POM工程,其余模块被其包含,在父工程中 使用标签表示包含的子模块:

八、Maven的常用插件

1. 资源拷贝插件

Maven在打包时默认只将src/main/resources里的配置文件拷贝到项目中并做打包处理,而非 此目录下的配置文件在打包时不会添加到项目中,使用此插件可打包指定文件

在pom.xml中配置要打包的资源:

<build>
    <resources>
        <resource>
            <!-- 要打包的资源位置 -->
            <directory>src/main/java</directory>
            <includes>
                <!-- 要打包的资源 -->
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <!-- 要打包的资源位置 -->
            <directory>src/main/resources</directory>
            <includes>
                <!-- 要打包的资源 -->
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

2. Tomcat插件

无需依赖外部的Tomcat服务器,Maven提供了tomcat插件

(1) 创建一个web项目

在这里插入图片描述
在这里插入图片描述

创建后的结构(缺少的如java、resources等目录可手动创建):

在这里插入图片描述

 注意:创建项目时如果出现警告:
		   No archetype found in remote catalog. Defaulting to internal catalo

解决方式:
在这里插入图片描述

(2) pom.xml文件中配置Tomcat插件

<build>
  <plugins>
    <!-- 配置Tomcat插件 -->
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
      <configuration>
        <!-- 配置Tomcat监听端口 -->
        <port>8080</port>
        <!-- 配置项目的访问路径(Application Context) -->
        <path>/</path>
      </configuration>
    </plugin>
  </plugins>

在这里插入图片描述

运行结果:
地址栏输入:http://localhost:8080/MyProject
成功访问到index.jsp页面
(在jsp页面修改编码格式为UTF-8,防止乱码)

出现此表示服务器启动成功
在这里插入图片描述

九、Maven的常用命令

Maven的命令都可以在以上图示右侧栏直接点击执行

  • install
    本地安装,包含编译、打包,安装到本地仓库

编译 - javac命令
打包 - jar命令,将java代码打包为jar文件
安装到本地仓库 - 将打包的jar文件保存到本地仓库中

  • clean
    清除已编译信息,删除工程中的target目录,会删除打包的jar文件

  • compile
    只编译,相当于javac命令

  • package
    打包,包含编译、打包两个功能

install和package的区别:

package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包 (war包或其它 形式的包) 布署到本地maven仓库和远程maven私服仓库

install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包 (war包或其它形式 的包) 布署到本地maven仓库,但没有布署到远程maven私服仓库

猜你喜欢

转载自blog.csdn.net/weixin_49343190/article/details/110009147
今日推荐