Maven-jar包管理工具
Maven
- 环境:
- eclipse-2020-12
- apache-maven-3.6.3
- apache-tomcat-9.0.41
- java - 1.8
Maven是什么
- Maven是一款服务于 Java平台的自动化构建工具
Make-->Ant-->Maven-->Gradle
- 构建
- 概念:以 “Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片” 等资源为 “原材料”,去 “生产” 一个可以运行的项目的过程。
- 编译
- 部署
- 搭建
- 编译:Java源文件[User.java] → 编译 → Class字节码文件[User.class] → 交给 JVM去执行
- 部署:一个 BS项目最终运行的并不是动态 Web工程本身,而是这个动态 Web工程 “编译的结果”
-
开发过程中,所有的路径或配置的类路径等都是以编译结果的目录结构为标准的。
Tips:运行时环境

其实是一组 jar包的引用,并没有把 jar包本身复制到工程中,所以并不是目录。
-
- 概念:以 “Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片” 等资源为 “原材料”,去 “生产” 一个可以运行的项目的过程。
- 构建过程中的各个环节:
- 清理:将以前编译得到的旧的 class字节码文件删除,为下一次编译做准备。
- 编译:将 Java源程序编程成 class字节码文件。
- 测试:自动测试,自动调用 junit程序。
- 报告:测试程序执行的结果。
- 打包:动态 Web工程打 war包,Java工程打 jar包。
- 安装:Maven特定的概念 —— 将打包得到的文件复制到 “仓库” 中的指定位置。
- 部署:将动态 Web工程生成的 war包复制到 Servlet容器的指定目录下,使其可以运行。
- 自动化构建
Maven 项目架构管理工具
我们目前用来就是方便导入jar包的
Maven的核心思想:约定大于配置
- 有约束,不要去违反。
Maven会规定好你该如何去编写我们的 Java代码,必须要按照这个规范来;
Maven的核心概念
- 约定的目录结构
- POM
- 坐标
- 依赖
- 仓库
- 生命周期/插件/目标
- 继承
- 聚合
约定的目录结构
- 创建约定的目录结构
- 根目录:工程名
- src目录:源码
- main目录:存放主程序
- Java目录:存放 Java源文件
- resources目录:存放框架或其他工具的配置文件
- test目录:存放测试程序
- Java目录
- resources目录
- main目录:存放主程序
- pom.xml文件:Maven工程的核心配置文件
- src目录:源码
- 根目录:工程名
pom文件
- pom的含义:Project Object Model 项目对象模型
pom.xml 是 Maven的核心配置文件

pom.xml 文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!-- Maven版本和头文件-->
<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>
<!-- 这里就是我们刚才配置的 GAV-->
<groupId>org.example</groupId>
<artifactId>untitled3</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- Package:项目的打包方式
jar:java应用
war:javaweb应用
-->
<packaging>war</packaging>
<!--配置-->
<properties>
<!--项目的默认构造编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--编码版本-->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!--具体依赖的 jar包配置文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--项目构建用的东西-->
<build>
<finalName>untitled3</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
- Maven 由于他的约定大于配置,我们之后可能遇到我们写的配置文件,无法导出或者生效的问题,解决方案:
原文章:[https://www.cnblogs.com/pixy/p/4798089.html]
> 配置resouces节点
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
坐标
-
Maven的坐标
使用下面三个向量在仓库中唯一定位一个 Maven工程-
groupId:公司或组织域名倒序+工程名<groupId>com.baidu.maven</groupId> -
artifactId模块名<artifactId>Hello</artifactId> -
version:版本<version>1.0.0</version>
-
-
Maven工程的坐标与仓库中路径的对应关系
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
本地仓库路径\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar
仓库
- 仓库的分类
- 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有 Maven工程服务。
- 远程仓库:
- 私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven工程服务。
- 中央仓库:架设在 Internet上,为全世界所有 Maven工程服务。
- 中央仓库镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
- 仓库中保存的内容:Maven工程
- Maven自身所需要的插件
- 第三方框架或工具的 jar包
- 我们自己开发的 Maven工程
依赖
-
Maven解析依赖信息时会到本地仓库中查找被依赖的 jar包。
- 对于我们自己开发的 Maven工程,在本地仓库中使用
mvn install命令安装。
- 对于我们自己开发的 Maven工程,在本地仓库中使用
-
依赖的范围
范围 对主程序是否有效 对测试程序是否有效 是否参与打包 是否参与部署 compile √ √ √ √ test × √ × √ provided √ √ × ×
生命周期
- 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
- Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
- Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一阶段,都是从这个生命周期最初的位置开始执行。
- 在命令行中运行
执行测试或打包就可以查看各个环节。
- 在命令行中运行
- 插件和目标
-
生命周期的各个阶段仅仅定义了要执行的任务是什么。
-
各个阶段和插件的目标是对应的。
-
相似的目标由特定的插件来完成。
生命周期阶段 插件目标 插件 compile compile maven-compiler-plugin test-compile testCompile maven-compiler-plugin -
可以将
插件目标看作 “调用插件功能的命令”
-
Maven安装
下载
下载位置:

下载完成后,解压到一个非中文无空格路径下;
如:C:\Environment
配置环境变量
在我们的系统环境变量中
-
检查 Java环境变量
C:\Users\wang>echo %JAVA_HOME% C:\Environment\Java\JDK-8 C:\Users\wang>java -version java version "1.8.0_271" -
配置如下配置:
M2_HOMEMaven目录下的 bin目录MAVEN_HOMEMaven的目录- 在我们系统的 path中配置
%MAVEN_HOME%\bin

在命令行中输入:mvn -version 测试 Maven是否安装成功。
设置远程仓库 URL
- 镜像:mirrors
- 作用:加速我们的下载
- 国内建议使用阿里云的镜像
文件路径:apache-maven-3.6.3\conf\settings.xml
<!-- 阿里云镜像 -->
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
本地仓库
在 Maven主目录中创建一个文件夹,用来当 Maven本地仓库
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- localRepository 标签用来保存 Maven本地仓库的地址 -->
<localRepository>C:\Environment\apache-maven-3.6.3\maven-repo</localRepository>
Maven设置JDK版本
在 IDE中使用 Maven
在 IDEA中使用 Maven
创建 Maven工程
- 打开IDEA
- 创建一个 MavenWeb项目
- 这个只有在 Web应用下才会有!

- 这个只有在 Web应用下才会有!
- 输入项目名..

- 设置 Maven的地址

- 等待项目初始化完毕

- 观察 Maven本地仓库中多了什么东西
- IDEA中的 Maven设置
注意:IDEA项目创建成功后,看一眼 Maven的配置


创建一个普通的 Maven项目


标记文件夹功能
方法一:

方法二:



在 Eclipse中使用 Mvane
设置 Eclipse内置的 Maven
- 添加自己解压的 Maven
- 导入 Maven的
settings.xml文件settings.xml文件存在的路径:apache-maven-3.6.3\conf\settings.xml
创建 JavaWeb工程
在 IDEA中配置 Tomcat
1、社区版配置
- 打开设置

- 安装 Tomcat插件

- 重启IDEA
- 导入 Tomcat服务器

- 导入 Tomcat启动配置

- 设置 Tomcat启动配置

- 打开网站

常用 Maven命令
-
注意:
- 执行于构建过程相关的 Maven命令,必须进入 pom.xml所在的目录。
- 与构建过程相关:编译、测试、打包....
- 执行于构建过程相关的 Maven命令,必须进入 pom.xml所在的目录。
-
常用命令
命令 作用 mvn clean 清理 mvn test-complie 编译主程序 mvn test 执行测试 mvn package 打包 mvn install 安装 mvn site 生成站点
解决遇到的问题
-
Maven 3.6.2
解决方法:降级为 3.6.1

-
Tomcat闪退
- Java环境问题
-
Maven默认 Web项目中的 web.xml版本问题

-
替换为 webapp4.0版本和 tomcat一致
- 路径为:
apache-tomcat-9.0.41\webapps\ROOT\WEB-INF
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> </web-app> - 路径为:
-
Maven仓库的使用
- Maven仓库官方地址:[https://mvnrepository.com/]





- Maven仓库官方地址:[https://mvnrepository.com/]
Servlet需要的架包
<dependencies>
<!-- Servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- JSP依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- JSTL表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- mysql的驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 导入 Lombok jar包 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
</dependencies>






浙公网安备 33010602011771号