Maven
Apache Maven 的作用
Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个 POM(Project Object Module 项目对象模型),中间画框部分即 Maven:
Maven 文件一览
bin 文件夹
maven 的所有可运行指令,里面的 mvn
是核心文件,
boot 文件夹
一般 boot 翻译为启动,里面的 plexus-classworlds-2.6.0.jar 文件是类管理器
conf 文件夹
配置文件夹,里面的 logging 是日志,settings.xml 是核心文件
lib 文件夹
包含 maven 运行所依赖的 jar 包
LICENSE 文件
协议
NOTICE 文件
注意事项
README.txt 文件
Apache Maven 的相关说明
Maven 基础知识
一、Maven 的坐标
作用:用于描述仓库中资源的位置
描述:由 groupld、artifactld、version 组成
groupld:定义当前 maven 项目隶属组织名称(通常是域名反写,如:com.xiaotuan)
artifactld:定义当前 maven 项目名称(通常是模块名称,如:CRM、SMS)
version:定义当前项目版本号
packaging:定义改项目的打包方式
举例:写入 maven 中的代码
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
二、去中央仓库找 jar 包
三、常用 mvn 命令
编译
mvn compile
清除
mvn clear
测试
mvn test
打包
mvn target
安装到本地仓库
mvn install
Maven 项目一览
Maven-JAVA / Maven-WEB 项目一览:
PS:一般一个工程一个 pom.xml,但如果分模块的话,每个模块则单独有一个!
IDEA 操作一览
新建 Maven-JAVA / Maven-WEB 项目
文件 > 项目结构 > 模块 > ➕ > 新建模块 > Maven > 从原型创建[√] > maven-archetype-quick / maven-archetype-webapp > 如下:
父项 | None |
---|---|
位置 | 空文件夹 |
Groupld | com.xiaotuan |
Artifactld | 通常与名称一致 |
archetypeCatalog | internal |
然后直接点击确定,让 maven 自主运行一段时间,再返回 项目结构 继续配置:
最后项目结构如图所示:
可以在代码右侧进行 maven 的操作:
tomcat 启动 web 工程
在官方网站:https://mvnrepository.com 下载 tomact 插件
这里我们选择比较旧的稳定版 Apache Tomcat Maven Plugin :: Tomcat 7.x » 2.1
在添加配置中添加 maven 运行命令 tomcat7:run
,名称为:启动服务器
然后点击运行,我们就可以访问本地 web 服务器(localhost)啦~
这里附上我 web 工程的 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">
<!-- 指定 pom 的模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 组织ID -->
<groupId>com.xiaotuan</groupId>
<!-- 项目ID -->
<artifactId>TEST_WEB</artifactId>
<!-- 版本号:完成版 release, 开发版 snapshot -->
<version>1.0-SNAPSHOT</version>
<!-- 打包方式:web 工程打包为 war, java 工程打包为 jar -->
<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>
<!-- 具体的依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<!-- 构建 -->
<build>
<!-- 设置插件 -->
<plugins>
<!-- 具体插件配置 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
依赖管理
依赖传递
直接依赖:相差 1 度的为直接依赖
间接依赖:相差 2 度或以上的为间接依赖
依赖冲突
路径优先:度数小的覆盖度数大的(如图所示)
声明优先:同层配置,前面的覆盖后面的
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- 下面的依赖中包含上面的依赖 -->
<dependency>
<groupId>com.xiaotuan</groupId>
<artifactId>TEST_WEB</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
特殊优先:同级配置,后面的覆盖前面的
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
可选依赖
添加一个标签 optional,并设置为 true
效果:别人用你的依赖时,optional 为 true 的依赖被隐藏,别人无法使用
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<optional>true</optional>
</dependency>
排除依赖
添加一个标签 exclusions,并在其中添加所要排除的依赖 exclusion
效果:你不想用别人的某个依赖,在 exclusions 中添加 不想用的依赖 exclusion 即可
<dependency>
<groupId>com.xiaotuan</groupId>
<artifactId>TEST_WEB</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupld>log4j</groupld>
<artifactld>log4j</artifactld>
</exclusion>
</exclusions>
</dependency>
依赖范围
添加一个标签 scope,并设置为依赖的范围
效果:仅在依赖的范围中,依赖才生效
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
依赖范围的传递性,如图所示:
项目构建生命周期
一般分为三套:
-
clean:清理工作
-
default:核心工作,例如编译,测试,打包,部署等
-
site:产生报告,发布站点等
clean
default
site
插件
插件与生命周期内的阶段是绑定的,所需插件也可在官网查看:https://maven.apache.org/plugins/index.html
Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的
下面以 source 插件为例,作用是:执行到生命周期中的 generate-test-resources 时,生成 jar 包(生成名称:TEST_JAVA-1.0-SNAPSHOT-sources.jar)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
Maven 高级用法
我参考的视频为黑马程序员,但我懒得再学下去了,等需要了再学吧~