一、Maven
- Maven是什么?Maven 是一个跨平台的项目管理工具。
- 作用:
- 基于Java平台的项目的构建、依赖包管理和项目信息管理
- 对项目提供一种依赖配置,配置好的项目,Maven会自动从我们设置的仓库中下载和管理jar包
- Maven也提供了一种标准的项目目录结构,通过这种约定,大大减少了不同项目的学习成本
- 运行原理
- 当我们在项目中配置依赖信息后,Maven会先从本地仓库查找是否存在相应的jar包,如果不存在则从镜像服务器(前提是在setting.xml中配置了)中下载jar包,如果镜像私服也没有,则从中央仓库进行下载。
- 常用命令
命令 | 说明 |
mvn compile | 编译项目 |
mvn clean | 清除项目的target |
mvn test | 测试 |
mvn package | 打包 |
mvn install | 打包,本地仓库也会放一份 |
- Maven 项目树状结构图
- Maven中的坐标
- 作用:标识项目或者依赖在仓库中的位置。
- groupId:项目名称,一般使用公司域名倒写,唯一标识某一家公司
- artifactId:Maven项目或模块名,区分同个公司不同项目
- version:项目版本,区分同个项目不同时期版本
- 依赖
- scope
- compile:默认,所有阶段
- provided:编译和测试阶段使用
- runtime:测试和运行阶段使用
- test:测试阶段使用
- 传递性:自己创建的项目依赖配置的jar包,配置的jar包可能依赖自身其它jar包,比如spring
二、Java Web转Maven项目
- 右击项目名,选择Add Framework Support
- 勾选Maven,点击OK,项目就变成了maven项目结构,并生成maven项目中的src目录和pom.xml文件
- 将原先项目根目录下resources中的所有配置文件挪到src/main/resources下
这里提醒一下,如果直接挪动,可能会导致有的文件夹没有挪过去,所以建议右击目录后选择Show in Explorer,通过系统自带的文件资源管理器进行操作
- 在src/main目录下创建webapp文件夹,然后备份或记录web/WEB-INF/lib中的jar(目的是为了方便后面添加依赖),之后将lib整个文件夹删除,再将web下的所有文件夹挪到刚刚创建好的webapp中
同理,测试相关的文件也可以挪到src/test/java目录下,这里就不演示了
- 接下来就是删掉那些不再需要的目录,比如out、resources、test、web(resource是根目录下那个,别乱删哈)
- 最后一步:添加依赖!拿出刚刚备份的jar或记录的jar包信息,然后在pom.xml文件中进行添加,推荐复制jar文件名,然后到
这里强调一下,由于普通的web项目可能没有配置maven的本地库信息,所以需要配置一下,否则,加载依赖会很慢很慢很慢...
弄好上面那些,我们就可以运行啦!\_\
三、小问题
Problem 1:
描述:启动项目后,访问资源时控制台打印如下信息:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
原因:配置依赖时指定了只能测试时使用
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
解决方法:删除<scope>test</scope>
Problem 2:
点开idea右侧Maven,发现项目名有红色波浪线
原因:Maven安装目录的conf/setting.xml文件中有多个mirrors标签(这里为了方便演示将多个mirrors标签一起,实际中可能不是紧挨在一起,可以通过查找该标签确认)
解决方法:删除mirrors标签,只保留一个
Problem 3
描述:启动项目时,出现以下错误信息:不再支持源选项 5。请使用 7 或更高版本。
原因:没有指定项目编译运行版本,而Maven默认配置的版本比较低,所以就报错喽
解决方法:在pom.xml中添加以下配置信息
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>