Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个 POM(Project Object Module 项目对象模型),中间画框部分即 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 的坐标
作用:用于描述仓库中资源的位置
描述:由 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 包
网站:mvnrepository.com
三、常用 mvn 命令
编译 mvn compile 清除 mvn clear 测试 mvn test 打包 mvn target 安装到本地仓库 mvn install
Maven-JAVA / Maven-WEB 项目一览:
PS:一般一个工程一个 pom.xml,但如果分模块的话,每个模块则单独有一个!
新建 Maven-JAVA / Maven-WEB 项目
文件 > 项目结构 > 模块 > ➕ > 新建模块 > Maven > 从原型创建[√] > maven-archetype-quick / maven-archetype-webapp > 如下:
父项 | None |
---|---|
位置 | 空文件夹 |
Groupld | com.xiaotuan |
Artifactld | 通常与名称一致 |
archetypeCatalog | internal |
然后直接点击确定,让 maven 自主运行一段时间,再返回 项目结构 继续配置:
最后项目结构如图所示:
可以在代码右侧进行 maven 的操作:
在官方网站: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>
我参考的视频为黑马程序员,但我懒得再学下去了,等需要了再学吧~