• Spring入门(四):使用Maven管理Spring项目


    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 Filesapache-maven-3.6.0。

    3.3 配置环境变量

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

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

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

    3.4 验证配置是否成功

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

    3.5 修改Maven配置文件

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

    <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:JavaMavenRepository。

    如果你不知道你所依赖的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实战》

  • 相关阅读:
    前端开发面试题总结之——HTML
    HashMap的那些事
    抽象同步队列AQS(中)—— AQS的重点方法解析
    抽象同步队列AQS(上)—— 宏观上理解AQS
    synchronized原理详解
    volatile原理详解
    JMM模型详解
    计算机运行时内存&处理器CPU初步认知
    mysql-索引详解
    mysql-事务隔离机制&mvcc原理
  • 原文地址:https://www.cnblogs.com/zwwhnly/p/10894781.html
Copyright © 2020-2023  润新知