Maven 入门使用
Maven的作用
- 依赖管理 jar包下载
- 构建管理 编译/打包/部署
Maven 获取

Maven 核心配置文件
-
配置文件在解压目录下的conf文件中

-
setting.xml文件解析
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- 配置本地仓库 默认的值是${user.home}/.m2/repository -->
<localRepository>D:/dev/tools/apache-maven-repository</localRepository>
<!-- 如果Maven要试图与用户交互来得到输入就设置为true,否则就设置为false,默认为true。 -->
<interactiveMode>true</interactiveMode>
<!-- 如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false。 -->
<usePluginRegistry>false</usePluginRegistry>
<!-- 如果构建系统要在离线模式下工作,设置为true,默认为false。 如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,那么这个设置是非常有用的。 -->
<offline>false</offline>
<!-- 配置镜像仓库 -->
<mirrors>
<!-- aliyun 镜像仓库 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<!-- maven 官方2号镜像 -->
<mirror>
<id>repo2</id>
<name>Mirror from Maven Repo2</name>
<url>http://repo2.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- JBoss 镜像 -->
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<!-- JDK版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</settings>
Maven 命令
mvn命令需要在pom.xml文件所在的目录的同层级中使用
mvn archetype:generate 创建maven工程
mvn clean 删除target目录
mvn compile 主程序编译
mvn test-compile 测试程序编译
mvn test 执行所有 @Test 方法
mvn package 打包 根据配置生成jar/war包
mvn install 将生成的jar包 安装到本地仓库中,后期可根据dependency 去依赖使用
mvn dependency:tree 查看当前工程的依赖的信息 树形结构
mvn dependency:list 查看当前工程的依赖的信息 列表结构
通过maven命令 生成web工程
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
pom 解析
<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.xml 所采用的结构模板版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 坐标信息 gav
groupId 公司或者组织的ID (公司或者组织域名的倒序,通常跟上项目名)
artifactId 一个项目或者是项目的一个模块ID (模块名称)
version 版本号 (模块的版本号)
-->
<groupId>com.potato.yeb</groupId>
<artifactId>yeb-server</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 当前工程 打包方式
jar: Java 工程
war: Web 工程
pom: 当前是父工程 用来管理其他子工程
-->
<packaging>jar</packaging>
<name>yeb-server</name>
<url>http://maven.apache.org</url>
<!-- 定义属性值 -->
<properties>
<!-- 定义 读取源码使用的字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖管理 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 当前依赖的使用范围 test/provided/compile-->
<scope>test</scope>
</dependency>
</dependencies>
</project>
依赖
1.依赖范围
标签位置:dependencies/dependency/scope
标签可选值:compile / test / provided / system / runtime / import
默认值:compile
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!--依赖生效的范围-->
<scope>test</scope>
</dependency>
</dependencies>
| ---- | main目录 | test目录 | 开发过程 | 部署到服务器 |
|---|---|---|---|---|
| compile | 有效 | 有效 | 有效 | 有效 |
| test | 无效 | 有效 | 有效 | 无效 |
| provided | 有效 | 有效 | 有效 | 无效 |
2.依赖的传递

解: A是否能使用C ,取决于B依赖C时的设定依赖范围,当使用范围为compile时,A可以使用C的功能
3.依赖的排除
排除:阻断依赖的传递

如图:
当A依赖B和C, 但是B依赖0.1版本的D,C依赖0.6版本的D,所以当A调用D的功能时,
可能会产生冲突,则需要阻断其中任意一个版本的传递,怎么配置阻断?
假设阻断0.1版本的D依赖
<dependency>
<groupId>B的groupId</groupId>
<artifactId>B的artifactId</artifactId>
<version>B的version</version>
<scope>compile</scope>
<exclusions>
<!-- 被排除依赖的groupId,artifactId,无需写版本号 -->
<exclusion>
<groupId>D的groupId</groupId>
<artifactId>D的artifactId</artifactId>
</exclusion>
</exclusions>
</dependency>
4.依赖的继承
继承:工程之间的继承关系,A工程继承B工程
-
B工程 父工程
-
A工程 子工程
本质上是A工程的pom.xml 配置 继承了 B工程pom.xml的配置
作用: 在父工程中统一管理项目中的依赖信息,具体管理依赖信息的版本 version
创建父工程:
<groupId>com.potato.yeb</groupId>
<artifactId>yeb</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 只有打包方式为pom的工程 才能作为父工程,父工程不写业务代码,只用来管理其他工程 -->
<packaging>pom</packaging>
创建子工程:
在父工程下 创建子工程 假设创建了三个子工程分别是
yeb-server,yeb-email,yeb-web
配置父子工程的关系:
父工程
<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.potato.yeb</groupId>
<artifactId>yeb</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- **** pom,标志当前工程为父工程 -->
<packaging>pom</packaging>
<!-- **** 管理的子工程 -->
<modules>
<module>yeb-server</module>
<module>yeb-email</module>
<module>yeb-web</module>
</modules>
<!-- 在父工程中统一管理依赖信息
在子工程中再进行依赖时无需再填写版本号,也可填写具体想使用的其他版本号-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子工程 yeb-server
<!-- 子工程 yeb-server -->
<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>
<!-- **** 指定父工程坐标信息-->
<parent>
<groupId>com.potato.yeb</groupId>
<artifactId>yeb</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- 如果子工程的groupId和父工程的一样,可以省略 -->
<!-- <groupId>com.potato.yeb</groupId>-->
<!-- 如果子工程的version和父工程的一样,可以省略 -->
<!-- <version>1.0-SNAPSHOT</version>-->
<artifactId>yeb-server</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</project>
5.配置自定义属性
在父子工程都可以配置,目的是方便版本的统一
<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.potato.yeb</groupId>
<artifactId>yeb</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!--自定义属性配置-->
<properties>
<!-- 自定义属性标签 -->
<!-- 标签名:属性名 -->
<!-- 标签值:属性值 -->
<!-- 引用方式:${spring.version} -->
<spring.version>5.2.12.RELEASE</spring.version>
</properties>
<modules>
<module>yeb-server</module>
<module>yeb-email</module>
<module>yeb-web</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<!-- 对自定义属性的调用 -->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<!-- 对自定义属性的调用 -->
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Maven 生命周期
作用:为了构建过程自动机完成,Mvean设定了三个生命周期,每一个环节对应构建过程的一个操作
| 生命周期名称 | 作用 | 各个环节 |
|---|---|---|
| Clean | 清理操作相关 | pre-clean clean post-clean |
| Site | 生成站点 | pre-site site post-site deploy-site |
| Default | 主要构建过程 | validate generate-sources process-sources generate-resources process-resources 复制并处理资源文件,至目标目录,准备打包。 compile 编译项目 main 目录下的源代码。 process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources 复制并处理资源文件,至目标测试目录。 test-compile 编译测试源代码。 process-test-classes test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。 prepare-package package 接受编译好的代码,打包成可发布的格式,如JAR。 pre-integration-test integration-test post-integration-test verify install将包安装至本地仓库,以让其它项目依赖。 deploy将最终的包复制到远程的仓库,以让其它开发人员共享;或者部署到服务器上运行(需借助插件,例如:cargo)。 |

浙公网安备 33010602011771号