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>