1. 为什么要使用Maven?

之前我们新建的项目,项目所要依赖的第三方jar包都在项目的类路径下(通常为lib目录),如下所示:

使用这种方式,我们无法知道第三方类库的依赖关系,比如导入一个特定的jar包时,可能此jar包还依赖于其他的jar包,其他的jar包又依赖于更多的jar包,这也是我们平常遇到的ClassNotFound异常的主要原因。

为了解决这个问题,我们急需引入一个项目构建工具。目前主流的项目构建工具有:Maven、Gradle等。

这里我们选择Maven作为项目构建工具。

2. Maven简介

Apache Maven是一个软件项目管理工具。

基于项目对象模型(Project Object Model,POM)的概念,Maven可用来管理项目的依赖、编译、文档等信息。

使用Maven管理项目时,项目依赖的jar包将不再包含在项目内,默认情况下集中放置在用户目录下的.m2文件夹下,不过这个路径可以自定义成自己喜欢的目录。

3. Maven安装

3.1 下载Maven

下载地址:http://maven.apache.org/

3.2 安装Maven

将下载好的apache-maven-3.6.0-bin.zip解压到自己喜欢的目录,我这边解压的目录为:E:\Program Files\apache-maven-3.6.0。

3.3 配置环境变量

环境变量弹窗打开方式:计算机--属性--高级系统设置--“高级”选项卡--环境变量。

1)新建系统环境变量MAVEN_HOME,值为:E:\Program Files\apache-maven-3.6.0(步骤2中解压的目录)

2)编辑系统变量Path,在最后增加:;%MAVEN_HOME%\bin

3.4 验证配置是否成功

打开cmd窗口,执行命令:mvn -version,如果能够正确的提示如下的版本信息,说明Maven配置成功。

3.5 修改Maven配置文件

打开maven下conf文件夹下的settings.xml文件,找到localRepository节点,配置本地Repository路径,我这里配置的是:E:\Java\MavenRepository。

<localRepository>E:/Java/MavenRepository</localRepository>

注意:文件中的路径和Windows下的路径不一样,拷贝过来后要将\替换为/,而且不能包含中文。

3.6 IDEA 配置Maven

打开IDEA后,依次打开File--Settings,然后按照如下图所示配置Maven:

注意:该设置仅针对当前项目。

4. Maven的pom文件

因为Maven是基于项目对象模型(Project Object Model,POM)的概念运作的,所以Maven的项目都有一个pom.xml文件用来管理项目的依赖以及项目的编译等功能。

4.1 dependencies元素

<dependencies>
</dependencies>

此元素包含项目需要依赖使用的多个<dependency></dependency>

4.2 dependency元素

<dependency></dependency>内部通过groupId、artifactId、version确定唯一的依赖,可以称这3个为坐标。

groupId:组织的唯一标识。

artifactId:项目的唯一标识。

version:项目的版本。

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

4.3 properties元素

<properties></properties>可以定义变量在dependency中引用,代码如下所示:

<properties>
<java.version>1.8</java.version>
<spring-framework.version>4.3.18.RELEASE</spring-framework.version>
</properties> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>

4.4 编译插件

Maven提供了编译插件,可在编译插件中设置Java的编译级别,代码如下:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>

4.5 Maven运作方式

Maven会自动根据dependency中的依赖配置,直接通过互联网在Maven中心库(https://mvnrepository.com/)下载相关依赖包到本地Maven库,本地Maven库默认是用户目录的.m2目录,但上面我们已经把本地Maven库修改为了:E:\Java\MavenRepository。

如果你不知道你所依赖的jar包的dependency怎么写的话,可以到https://mvnrepository.com/网站检索。

5. 使用Maven管理Spring项目

5.1 项目添加Maven依赖

在IDEA中,选中项目根目录,依次点击右键-->Add Framework Support,然后在弹出的界面中选中Maven:

此时项目目录下,会生成一个pom.xml文件,原始内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>groupId</groupId>
<artifactId>spring-action</artifactId>
<version>1.0-SNAPSHOT</version> </project>

这里,我将groupId的值修改成自己域名:com.zwwhnly。

<groupId>com.zwwhnly</groupId>
<artifactId>spring-action</artifactId>
<version>1.0-SNAPSHOT</version>

5.2 配置文件迁移

将之前的spring-config.xml配置文件迁移至src/main/resources目录下。

5.3 pom文件添加jar包依赖

打开File-->Project Structure-->Modules,将之前方式引入的第三方jar包删除:

然后通过pom文件添加jar包依赖:

<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>1.16.0</version>
</dependency>
</dependencies>

修改完pom文件记得点击“Import Changes”:

导入完成后的项目结构图为:

可以看出和之前的区别,现在的jar包都由Maven来管理,也可以查看项目的依赖树:

5.4 最终的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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.zwwhnly</groupId>
<artifactId>spring-action</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<java.version>1.8</java.version>
<spring-framework.version>4.3.18.RELEASE</spring-framework.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>1.16.0</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

上面讲解的方式适用于新建项目时不是Maven项目,后续转为Maven项目的操作步骤。

其实,我们可以通过IDEA,直接新建Maven项目,然后修改pom文件为以上内容引入Spring等依赖(推荐该方式):

6. 源码及参考

源码地址:https://github.com/zwwhnly/spring-action.git,欢迎下载。

使用IntelliJ IDEA 配置Maven(入门)

[Java] Maven 安装和配置

用IDEA将普通Web项目转Maven项目

汪云飞《Java EE开发的颠覆者:Spring Boot实战》

Spring入门(四):使用Maven管理Spring项目的更多相关文章

  1. 使用Maven管理Spring

    原文链接: Spring with Maven原文日期: 2013年04月17日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述本教程向您展示怎样通过 Maven 管理 Spring 的 ...

  2. 使用Maven管理Spring[转]

    原文链接: Spring with Maven 原文日期: 2013年04月17日 翻译日期: 2014年06月29日 翻译人员: 铁锚 翻译原文连接:http://blog.csdn.net/ren ...

  3. maven管理的项目出现Error configuring application listener of class org.springframework.web.context.ContextL

    eclipse里用maven管理的项目,在运行的时候出现 Error configuring application listener of class org.springframework.web ...

  4. 【Spring Framework】Spring入门教程(八)Spring的事务管理

    事务是什么? 事务:指单个逻辑操作单元的集合. 在操作数据库时(增删改),如果同时操作多次数据,我们从业务希望,要么全部成功,要么全部失败.这种情况称为事务处理. 例如:A转账给B. 第一步,扣除A君 ...

  5. [Spring Boot 系列] 集成maven和Spring boot的profile 专题

    maven中配置profile节点: <project> .... <profiles> <profile> <!-- 生产环境 --> <id& ...

  6. [Spring Boot 系列] 集成maven和Spring boot的profile功能

    由于项目的需要, 今天给spirng boot项目添加了profile功能.再网上搜索了一圈,也没有找到满意的参考资料,其实配置并不难,就是没有一个one stop(一站式)讲解的地方,所以有了写这篇 ...

  7. Spring系列(四) 面向切面的Spring

    除了IOC外, AOP是Spring的另一个核心. Spring利用AOP解决应用横切关注点(cross-cutting concern)与业务逻辑的分离, 目的是解耦合. 横切关注点是指散布于代码多 ...

  8. Spring学习(四)--面向切面的Spring

    一.Spring--面向切面 在软件开发中,散布于应用中多处的功能被称为横切关注点(cross- cutting concern).通常来讲,这些横切关注点从概念上是与应用的业 务逻辑相分离的(但是往 ...

  9. 对于Maven管理的项目制定虚拟目录

    基于Maven管理的web项目结构: target目录是用来存放项目打包之后生成的文件的目录,此目录中的文件必须调用mvn clean package后才能生成, 如果把虚拟目录设置在此目录中,则每次 ...

随机推荐

  1. IOS AFNETWORKING POST

    IOS AFNETWORKING POST 请求 #pragma mark post 请求 // 获取 url 路劲,不带参数 NSString *requestUrl = [[url compone ...

  2. [网页游戏开发]Morn简介及使用教程

    网页游戏开发利器,morn系列教程之Morn简介及使用教程 网页游戏开发的一大部分工作是在和UI制作上,一个好的工具及框架能使开发事半功倍,Adobe自带flash IDE和Flex各有不足. Mor ...

  3. 开启kbmmw 5.09 中的XML-RPC和 JSON-RPC 服务

    kbmmw 5.09 里面增加了XML-RPC和 JSON-RPC 服务支持,但是默认没有开启. 需要在安装前,修改kbmMWConfig.inc文件. 加入以下定义 {$DEFINE KBMMW_J ...

  4. 【BZOJ1042】[HAOI2008]硬币购物 容斥

    [BZOJ10492][HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值 ...

  5. 【BZOJ3218】a + b Problem 可持久化线段树优化建图

    [BZOJ3218]a + b Problem 题解:思路很简单,直接最小割.S->i,容量为Bi:i->T,容量为Wi:所有符合条件的j->new,容量inf:new->i, ...

  6. vmware安装操作系统

    安装的时候,直接选择“从光盘或者映像安装”就可以了,很方便的.不需要再去从u盘什么的安装了.

  7. Windows消息、绘图与多线程

    有一个项目,一旦点下按钮后,用死循环不停的读数据,读出后立刻用可视化的方法显示.如果不采用多线程的方法,程序运行都正确,但无法关闭窗口,不清楚是窗口无法通过关闭按钮来接受Windows消息,还是接受了 ...

  8. Mongoose中的关联表查询 && 聚合查询

    注:阅读此篇文章,需要有一定的Mongo基础.基本的不会再重复介绍. 例:  有两张表,一张是博客列表,另外一张是博客的标签表.现在我们要做两张表的插入和关联查询. 创建两张表的Schema 主表bl ...

  9. UI标签库专题四:JEECG智能开发平台 Upload(上传标签)

     1. Upload(上传标签) 1.1.  參数 属性名 类型 描写叙述 是否必须 默认值 id string 上传控件唯一标示 是 null name string 控件name 是 null ...

  10. Vue一次性简洁明了引入所有公共组件

    使用场景 -在开发过程中,往往会有很多自己定义公用组件,我们通过import 导入,components挂载到实例上就行,项目刚开始还好,但是随着项目迭代,组件越来越多,同一个组件不同的方式用需要重复 ...