maven教程

maven使用

maven:是 Apache 下的一个纯 Java 开发的开源项目
用途:项目管理工具

优势

管理 jar包;
编译代码,自动运行单元测试,打包,部署项目,生成 Web 站点;
解决了使用不同软件进行开发,文件目录不同的问题,改善了开发测试以及配置文件混乱,不易维护的问题。

安装
  • 下载
    Maven官网下载地址
  • 安装
    Maven使用java语言开发的,解压即可运行
    注意:maven依赖 JAVA_HOME
  • 目录
    bin:存放了 maven 的命令
    boot:存放了一些 maven 本身的引导程序,如类加载器等
    conf:存放了 maven 的一些配置文件,如 setting.xml 文件
    lib:存放了 maven 本身运行所需的一些 jar 包
  • 环境变量
    MAVEN_HOME: maven安装目录
    path: %MAVEN_HOME%\bin
  • 配置完毕了
    mvn --version
核心功能
依赖管理
本地仓库

项目通过jar坐标,先从本地仓库找对应jar包,如果找不到会从远程仓库(互联网)去下载 jar
包,保存在本地仓库(在程序员的电脑上),第二次不需要从远程仓库去下载。
在这里插入图片描述
1.1本地仓库配置
将资料中的 repository.zip 解压到非中文及特殊符号目录下;
修改 maven的安装目录/conf/settings.xml 文件的标签
<localRepository>本地仓库地址</localRepository>

远程仓库

2.1 中央仓库
由专业团队(maven团队)统一维护。
中央仓库的地址:http://repo1.maven.org/maven2/
2.2 私服
架设在公司局域网内,提供给内部的人员使用。
2.3 第三方仓库
中央仓库只有一个国内使用非常慢,我们可以更换为:阿里云镜像
2.4 远程仓库设置
修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

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

引入jar包的方式
在这里插入图片描述

项目构建
maven项目目录:
* java项目
java工程名(项目名)
|-- src目录
|-- main目录(主干代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- test目录(测试代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目录(存放编译后的class文件.....* web项目【重点】
web工程名(项目名)
|-- src目录
|-- main目录(主干代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- webapp目录(页面资源)
|-- WEB-INF
|-- web.xml(web工程核心配置文件)
|-- index.jsp
|-- css、js、img..
|-- test目录(测试代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目录(存放编译后的class文件.....
maven指令

通过一系列的 maven 命令,来对我们的工程进行清理、编译、测试、打包(jar包或war包,打包成什么需要在pom.xml中设置,默认打包成jar包)、安装、部署。
在这里插入图片描述

idea创建maven工程
  • IDEA配置本地Maven环境(全局…)
    在这里插入图片描述
  • 创建java项目
    在这里插入图片描述
    在这里插入图片描述
    定maven环境的jdk版本和字符集
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

在这里插入图片描述
如何导入依赖jar包
maven的搜索仓库
在这里插入图片描述

  • 创建web项目
    在这里插入图片描述
    idea创建web工程,需要我们安装一个插件:jbljavatoweb
    在这里插入图片描述
    在这里插入图片描述
  • 发布web项目
    ① idea使用外置tomcat运行【重点】
    ② idea使用maven内置tomcat插件【了解】
    1. Tomcat插件最新为Tomcat7,没有解决get请求的中文乱码问题;
    2. 需要配置pom.xml
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>

在这里插入图片描述

  • 依赖范围
* compile
默认依赖范围,作用域在编译、测试、运行时都有效。比如mybatis
* test
作用域在测试时有效。编译和运行时不需要,比如:Junit。
* provided
作用域在编译、测试时有效。运行时不需要,比如: servlet api 被 tomcat 容器提供。
* runtime
作用域在测试、运行时有效。编译时不需要,比如:jdbc的驱动包。
maven的依赖传递
依赖传递与依赖冲突

*依赖传递
eg:web项目直接依赖了spring-webmvc,而spring-webmvc依赖了spingaop、spring-beans等。最终的结果就是在我们的web项目中间接依赖了spring-aop、spring-beans等。

  • 依赖冲突
    eg:spring-webmvc 依赖 spirng-beans-5.1.5,spring-aop 依赖 springbeans-5.1.6,但是发现 spirng-beans-5.1.5 加入到了工程中,而我们希望 spring-beans-5.1.6 加入工程。这就造成了依赖冲突。
  • 解决依赖冲突的方法
  1. maven提供的:
    1.1 第一声明者优先
    在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传
    递过来的依赖。
    1.2 路径近者优先
    直接依赖大于依赖传递
  2. 排除依赖
    pom中使用exclusions标签将传递过来的依赖排除出去。
    在这里插入图片描述
  3. 版本锁定
    采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以
    锁定的版本为准添加到工程中,此方法在企业开发中经常使用。
    版本锁定的使用方式:
    第一步:在dependencyManagement标签中锁定依赖的版本
    第二步:在dependencies标签中声明需要导入的maven坐标
    ①在dependencyManagement标签中锁定依赖的版本
    在这里插入图片描述
    ②在dependencies标签中声明需要导入的maven坐标
    在这里插入图片描述
  4. 使用properties标签
<properties>
<spring.version>5.1.5.RELEASE</spring.version>
<springmvc.version>5.1.5.RELEASE</springmvc.version>
<mybatis.version>3.5.1</mybatis.version>
</properties>
<!--锁定jar版本-->
<dependencyManagement>
<dependencies>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- springMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
maven聚合工程
分模块构建maven工程
  • 第一种:按照业务模块进行拆分,每个模块拆分成一个maven工程,例如将一个项目分为用户模块,订
    单模块,购物车模块等,每个模块对应就是一个maven工程
  • 第二种:按照层进行拆分,例如持久层、业务层、表现层等,每个层对应就是一个maven工程
    不管上面那种拆分方式,通常都会提供一个父工程,将一些公共的代码和配置提取到父工程中进行统一
    管理和配置。
    在这里插入图片描述
maven工程的继承

maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的
目的是为了消除重复代码。
在这里插入图片描述

maven工程的聚合

在maven工程的pom.xml文件中可以使用标签将其他maven工程聚合到一起,聚合的目的是为了进行
统一操作。
例如拆分后的maven工程有多个,如果要进行打包,就需要针对每个工程分别执行打包命令,操作起来
非常繁琐。这时就可以使用标签将这些工程统一聚合到maven父工程中,需要打包的时候,只需要在此
工程中执行一次打包命令,其下被聚合的工程就都会被打包了。
在这里插入图片描述

分模块构建maven工程具体演示

工程整体结构如下:
1)maven_parent为父工程,其余工程为子工程,都继承父工程maven_parent
2)maven_parent工程将其子工程都进行了聚合
3)子工程之间存在依赖关系:
maven_dao依赖maven_domain
maven_service依赖maven_dao
maven_web依赖maven_service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值