Maven管理工具的基本使用
1.MavenAntGradle
2.maven介绍
maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
(http://maven.apache.org/)
3.Maven的目录结构
|-bin包含mvn的运行脚本
|
|-boot包含一个类加载器的框架
|
|-conf配置文件目录
|
|-libMaven运行时所依赖的类库,包括一些第三方的类库
4.Maven的环境变量配置
M2_HOMED:\maven\apache-maven-3.3.9
Path;%M2_HOME%\bin
验证是否配置成功:mvn-v
5.Maven创建的目录
src
-main
---java
---package
-test
---java
---package
-resources
6.
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.maven.model</groupId>
<!--项目的包名(组织名,+公司网址反写,+项目名)-->
<artifactId>maven01-model</artifactId>
<!--模块名(项目名-模块名)-->
<version>0.0.1SNAPSHOT</version>
<!--项目的版本(0.0.1SNAPSHOT)-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>7.项目的编译
mvncompile
运行测试用例
mvntest
mvnpackage
8.Maven的常用命令
mvn-v查看maven的版本
mvncompile编译项目
mvntest项目测试
mvnpackage打包项目
mvnclean删除生成的target文件夹(字节码文件和测试报告)
mvninstall安装jar包到本地仓库中
9.自动创建目录骨架
使用archetype插件可以用于创建符合Maven规定的目录骨架。
(1)mvnarchetype:generate
(2)mvnarchetype:genarate-DgroupId=cn.maven.demo-DartifactId=maven04-demo-Dversion=0.0.1SNAPSHOT-Dpackage=cn.maven.demo
10.maven中的坐标和仓库
maven中构件的坐标都是由groupId,artifactId,version来表示。
|-本地仓库
仓库-|
|-远程仓库(https://repo.maven.apache.org/maven2->http://search.maven.org)
镜像仓库->需修改settings.xml文件中的<mirror>
<mirror>
<id>maven.net.cn</id>
<mirrorOf>central</mirrorOf>
<name>central mirror in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>修改本地仓库的位置->需修改settings.xml文件中的<localRepository>
<localRepository>D:/maven/repo</localRepository>
11.在Eclipse中安装maven插件以及创建maven项目
高版本的eclipse(4.0以上)中已经安装了maven插件,无需再安装。修改配置如下:
Window->preferences->maven->installations(添加本机安装的maven<D:\maven\apache-maven-3.3.9>)->UserSettings(D:\maven\repo\settings.xml)
Window->preferences->java->installedJREs->DefaultVMarguments:(-Dmaven.multiModuleProjectDirectory=$M2_HOME)
12.maven的生命周期和插件
完整的项目构件过程包括:
清理、编译、测试、打包、集成测试、验证、部署
maven生命周期:
clean清理项目(clean)
|-pre-clean执行清理前的工作
-|-clean清理上一次构建生成的所有文件
|-post-clean执行清理后的文件
default构建项目(compile,test,package,install)
site生成项目站点()
|-pre-site在生成项目站点之前要完成的工作
|-site生成项目的站点文档
|-post-site在生成项目站点后要完成的工作
|-site-deploy发布生成的站点到富强武器上
maven插件:http://maven.apache.org/plugins/index.html
插件应用实例:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
13.pom.xml的常用元素
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">
<!--指定了当前pom的版本-->
<modelVersion>4.0.0</modelVersion>
<!--pom的坐标信息-->
<groupId>反写的公司网址+项目名</groupId> <!--maven中项目的标识-->
<artifactId>项目名+模块名</artifactId>
<!--maven项目中一个模块的标识-->
<!--
snapshot 快照
alpha 内测
beta 公测
Release 稳定
GA 正式发布
-->
<version>0.0.1SNAPSHOT</version> <!--当前项目的版本
号(第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号)-->
<!--默认jar,还可以是war,zip,pom-->
<packaging></packaging> <!--打包方式-->
<name></name> <!--项目的描述名,产生项目文档的时候使用-->
<url></url> <!--项目的地址-->
<description></description> <!--项目描述-->
<developers></developers> <!--开发人员列表-->
<licenses></licenses> <!--许可证信息-->
<organization></organization> <!--组织信息-->
<dependencies>
<!--依赖列表,可以包含多个依赖项-->
<dependency> <!--依赖项-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<type></type>
<scope></scope> <!--依赖的范围-->
<!--设置依赖是否可选--> <!--默认false(子项目是继承的),如果为true则该子项目必须显式的引入该依赖-->
<optional></optional>
<!--排除依赖传递列表-->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖的管理-->
<dependencyManagement>
<depandencies><dependency></dependency></depandencies>
</depandencyManagement>
<!--对构建的行为进行支持-->
<build>
<!--插件的列表-->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<parent></parent> <!--在子模块中对父模块的继承-->
<modules></modules> <!--多个模块的集合编译,聚合运行多个maven项目-->
</project>14.maven中依赖范围
三种classpath:
1.编译
2.测试
3.运行
maven提供了6种scope的属性值:
compile:默认的范围,对编译测试运行都有效
provided:在编译测试有效
runtime:在测试运行时有效
test:只会在测试范围有效
system:在编译和测试有效,与本机系统相关联,可移植性差
import:导入的范围,只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
15.maven中的依赖传递
修改创建的maven项目中的默认jdk版本
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>16.maven中的依赖冲突
1.短路优先优先解析路径短的版本
2.先声明先优先如果路径长度相同,则谁先声明,先解析谁
17.聚合和继承
聚合:
<modules> <module>../hongxin-beg</module> <module>../hongxin-nang</module> <module>../hongxin-shanji</module> </modules>
继承:
<properties>
<junit.version>3.8.1</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<parent>
<groupId>com.hongxin</groupId>
<artifactId>hongxin-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>18.使用maven创建web项目
NewMavenproject->选择maven-archetype-webapp->创建web项目->在pom.xml添加servlet的jar包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>->创建src/main/java,src/test/java,src/test/resources资源文件夹->右键项目选择BuildPath
->选择Source,查看文件夹是否指向正确(webdemo/target/classes,webdemo/target/test-classes)
->右键项目选择Properties->选择ProjectFacets->打勾DynamicWebModule
->右键项目选择Properties->选择DeploymentAssembly->remove掉test文件夹
<!--使用jetty或者tomcat启动-->
<build>
<finalName>webdemo</finalName>
<plugins>
<plugin>
<!--
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>