在项目开发过程当中,只要依赖第三方库的必定会使用到Maven,那么Maven究竟是什么,该怎么使用,可能对咱们来讲就不是特别的清楚; 此次就来看看我整理的一些Maven简单用法;html
1, Maven介绍:apache
maven是用于构建和管理任何JAVA项目的工具;tomcat
2, Maven的目标: 服务器
让开发人员在最短的时间内了解开发工做的完整状态;框架
好了好了,这些废话就先到这里;须要详细了解的能够访问其官网:maven
http://maven.apache.org/what-is-maven.htmlide
3, 从官网上将Maven下载下来:工具
(1), MAVEN目录说明:post
bin : 包含mvn的运行脚本; 在cmd中输入mvn调用该目录;
boot : 包含类加载器的框架, mvn使用它加载本身的类库;
conf : 配置文件目录;
lib : 包含自身和第三方的类库;测试
(2), 环境变量配置:
M2_HOME
D:\Maven\apache-maven-3.5.2
Path中加入:
%M2_HOME%\bin
验证: cmd中: mvn -v
(3), 项目编译:
在项目目录下:
mvn -v : 查看Maven版本
mvn compile : 项目编译
mvn test : 项目测试
mvn package : 打包jar
mvn clean : 删除target
mvn install : 安装jar包到本地仓库
(4), 建立目录的两种方式:
1, mvn archetype:generate 按照提示进行选择
2, mvn archetype:generate -DgroupId=组织名(网址反写+项目名)
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所在的包名
例:
D:\Maven\code\maven02>mvn archetype:generate -DgroupId=com.gy.maven02 -DartifactId=maven02-utils -Dversion=0.0.1SNAPSHOT -Dpackage=com.gy.maven02.utils
4, Maven中的坐标和仓库:
Maven 经过这三个来定位坐标:
<groupId>com.gy.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
Maven 仓库 : 本地仓库,远程仓库
镜像仓库:
更改: D:\Maven\apache-maven-3.5.2\conf\settings.xml 中 第152行:
<!--切换阿里镜像--> <mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <name>aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
更改本地仓库位置:
更改: D:\Maven\apache-maven-3.5.2\conf\settings.xml 中 第55行:
<!--切换本地仓库位置--> <localRepository>D:/Maven/repo</localRepository>
更改默认JDK版本:
更改: D:\Maven\apache-maven-3.5.2\conf\settings.xml 中 第197行:
<!--切换JDK版本为1.8--> <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>
5, 完整项目构建过程包括:
清理, 编译, 测试, 打包, 集成测试, 验证, 部署
6, Maven 生命周期:
clean : 清理项目
clean的三个阶段:
pre-clean : 执行清理前的工做
clean : 清理上一次构件生产的全部文件
post-clean : 执行清理后的文件
default : 构建项目(最核心)
clean,--> compile,--> test,--> package, install
执行package时会依次执行前面的步骤;
site : 生成项目站点
site的四个阶段:
pre-site : 在生成项目站点前要完成的工做;
site : 生成项目的站点文档;
post-site: 在生成项目站点后要完成的工做;
site-deploy : 发布生成站点到服务器上7, Maven插件的使用:
7, Maven插件的使用: 在项目pom.xml中添加:
<build> <!-- Maven插件集合 --> <plugins> <!-- Maven-source插件,做用: 将项目源码打包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.4</version> <executions><!-- 插件运行阶段集合 --> <execution> <phase>package</phase><!-- 在项目package(打包)时运行该插件 --> <goals><!-- 运行目标 --> <goal>jar-no-fork</goal><!--与jar类似(将源码打成jar包),但不会构建生命周期--> </goals> </execution> </executions> </plugin> </plugins> </build>
8, pom.xml经常使用元素介绍:
<?xml version="1.0" encoding="UTF-8"?> <!-- Maven官网: http://maven.apache.org --> <!-- project: pom.xml的根元素,包含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/maven-v4_0_0.xsd"> <!-- 固定的MAVEN版本 --> <modelVersion>4.0.0</modelVersion> <!-- 多模块使用: <parent></parent> parent: 一般用于子模块中对父模块的继承; <modules> modules: 指定多个模块,一块儿进行编译 <module></module> </modules> --> <!-- 当前项目坐标: groupId : 反写的公司网址.项目名; artifactId : 项目名-模块名; version : 项目版本 第一个0: 大版本号; 第二个0: 分支版本号; 第三个0: 小版本号; SNAPSHOT 快照版本; ALPHA 内部测试; BETA 公测版本; GA 正式发布; --> <groupId>com.gy.maven01</groupId> <artifactId>maven01-model</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 打包形式,默认为jar: jar JAR包; war WAR包; zip 压缩包; pom 配置包; <packaging>jar</packaging> --> <!-- 不常常用: 产生项目文档时须要用: <name>项目描述名</name> 项目地址: <url></url> 项目描述: <description></description> 项目开发人员列表: <developers></developers> 开源框架许可证信息: <licenses></licenses> 组织信息: <organization></organization> --> <!-- 重要: 项目依赖列表 <dependencies> <dependency> dependency: 依赖项目 <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <type></type> <scope>test</scope> scope: 依赖范围; <optional>false</optional> optional(true|false): 设置依赖是否可选,默认为false; <exclusions> exclusions: 排除依赖的列表 <exclusion></exclusion> exclusion : 排除依赖的项目 </exclusions> </dependency> </dependencies> --> <!-- <scope></scope> : 依赖范围详解(官网: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope): compile : 默认,对编译,测试,运行 都有效; provided : 在编译,测试时有效; runtime : 在测试,运行时有效; test : 只在测试时有效; system : 在编译,测试时有效;与本机系统相关联,移植性差; import : 导入的依赖范围;它只使用在 <dependencyManagement> 中,表示从其余pom中导入dependency配置; --> <!-- 不常常使用: <dependencyManagement> dependencyManagement: 项目依赖管理 <dependencies> dependencies: 项目依赖列表 做用: 里面的依赖项目不会直接参与运行,一般定义在父类模块中,供子模块继承; </dependencies> </dependencyManagement> --> <!-- 项目依赖列表 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> <!-- <build> <plugins> plugins: Maven插件列表 <plugin> plugin: 插件 <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat8-maven-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>package</phase> 在打包时执行该插件 <goals> <goal>run</goal> 运行目标: run; </goals> </execution> </executions> </plugin> </plugins> </build> --> <build> <!-- Maven插件集合 --> <plugins> <!-- Maven-source插件,做用: 将项目源码打包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.4</version> <executions><!-- 插件运行阶段集合 --> <execution> <phase>package</phase><!-- 在项目package(打包)时运行该插件 --> <goals><!-- 运行目标 --> <goal>jar-no-fork</goal><!--与jar类似(将源码打成jar包),但不会构建生命周期--> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
9, Maven依赖传递:
B依赖A; C依赖B, ===> C依赖A
10, Maven依赖冲突:
1, 短路优先原则:
A -> B -> C -> X(jar);
A -> D -> X(jar);
两条路径优先解析下面的较短路径;
2, 路径相同,先声明先解析;
11, Maven聚合和继承:
<!-- <parent></parent> parent: 一般用于子模块中对父模块的继承; <modules> modules: 指定多个模块,一块儿进行编译 <module></module> </modules> <dependencyManagement> dependencyManagement: 项目依赖管理 <dependencies> dependencies: 项目依赖列表 做用: 里面的依赖项目不会直接参与运行,一般定义在父类模块中,供子模块继承; </dependencies> </dependencyManagement> -->
差很少就是这么多了,其余的用法能够参考MAVEN官网;