Maven的入门知识

###简介
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

###安装

  • 官网下载安装包,如:apache-maven-3.5.4-bin.zip

  • 将其解压后放到指定路径下,如:C:\Program Files

  • 设置环境变量M2_HOME和Path

  • 使用命令mvn -version进行测试

  • 将C:\Program Files\apache-maven-3.5.4\conf\settings.xml配置文件放置到%HOME%/.m2文件夹下(%HOME%一般为C:\Users\username)

  • 修改settings.xml中的本地仓库和镜像配置

###坐标、构件、仓库

构件:在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可成为构件。每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId和version等信息构成,由此,Maven就可以对构件进行版本控制,管理。

GroupId/artifactId/version三个组成一个坐标,maven通过坐标下载下来的构件一般都放在C:\Users\username\.m2\repository这个文件夹中。
找各个jar包坐标的网站:http://www.mvnrepository.com/
仓库:

  • 本地仓库,可以通过修改…\apache-maven-3.5.0\conf下settings.xml的localRepository属性来更改本地仓库的路径
  • 远程仓库,即全球公用仓库
  • 镜像仓库(可以在settings.xml中修改镜像仓库地址)

###完整的项目构件过程
清理、编译、测试、打包、集成测试、验证、部署
三套生命周期,他们之间互不影响,但是每套生命周期都有不同的阶段,他们会按顺序依次执行

  1. Clean清理项目,包含以下三个阶段
    Pre-clean 执行清理前的工作
    Clean 执行上一次构件生成的所有文件
    Post-clean 执行清理后的文件
  2. Default构件项目(最核心),常用的有以下几种阶段
    Compile
    Test
    Package
    install
  3. Site 生成项目站点
    Pre-site 在生成站点前要完成的工作
    Site 生成项目的站点文档
    Post-site 在生成项目站点后要完成的工作
    Site-deploy 发布生成的站点到服务器上

###Pom.xml解析

  1. 依赖冲突
    • 短路优先
      A->B->C->X(jar)
      A->D->X(jar),这个被优先解析
    • 路径相同的情况下,先声明先优先
  2. 聚合和继承
  3. Build的讲解 http://blog.csdn.net/taiyangdao/article/details/52374125
  4. Reporting的讲 http://blog.csdn.net/taiyangdao/article/details/52389407

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/maven-v4_0_0.xsd">
    <!-- 指定了当前的pom版本 -->
	<modelVersion>4.0.0</modelVersion>
    
	<groupId>maven02</groupId><!-- 反写的公司网址+项目名 -->
	<artifactId>maven02-model</artifactId><!--  项目名+模块名 -->
	<!--有三个数字组成,第一个1表示大版本号,
		第二个0表示分支版本号
		第三个0表示小版本号
		snapshot快照
		alpha内部测试
		beta公测
		Release稳定
		GA正式发布版本-->
	<version>1.0.01SNAPSHOT</version>

	<!-- 默认是jar,还可以是war zip pom -->
	<packaging></packaging>

	<!--项目描述名-->
	<name></name>
	<!--项目地址-->
	<url></url>
	<!--项目描述-->
	<description></description>
	<!--开发人员列表-->
	<developers></developers>
	<!--许可证-->
	<licenses></licenses>
	<organization></organization><!--组织信息-->

	<!--比如古惑仔中,山鸡听楠哥,楠哥听B哥,因此山鸡传递依赖与B哥,但是如果在楠哥的dependency下
		加上exclusions,把B个的依赖去掉,那么山鸡只听楠哥的,B哥有没有无所谓-->
	<!--依赖列表-->
	<dependencies>
		<dependency><!--依赖项-->
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.2</version>
			<type></type>
			<!--依赖的范围,有6种,
				compile	默认
				provided 编译测试有效,最后运行时不会被加入
				runtime 在测试和运行时有效
				test	只在测试范围有效
				system	在编译和测试时有效,与本地系统相关联,移植性差
				import	导入的范围,只在dependencyManagement标签中使用,
						表示从其他的pom中导入dependency的配置
				控制依赖与三种classpath的关系,-->
			<scope>test</scope>
			<optional></optional><!--设置依赖是否可选-->
			<!--排除依赖传递的列表-->
			<exclusions>
				<exclusion>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>maven01</groupId>
			<artifactId>maven01-model</artifactId>
			<version>1.0.01</version>
		</dependency>
	</dependencies>

	<!--依赖管理,他并不会在此项目中运行,主要定义在父模块中,供子模块继承用的-->
	<dependencyManagement>
		<dependencies>
			<dependency>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<!--为构件的行为提供相应的支持-->
	<build>
		<plugins><!--插件列表-->
			<plugin>
				<groupId></groupId>
				<artifactId><artifactId>
				<version></version>
			</plugin>
		</plugins>
	</build>

	<!--用于在子模块中,对父模块的pom的继承-->
	<parent></parent>

	<!--指定多个模块一起编译-->
	<modules>
		<module></module>
		<module></module>
		<module></module>
	</modules>

</project>

###常用命令

  1. Mvn –v 查看版本
  2. Mvn clean 删除target
  3. Mvn install 安装jar包到本地仓库
  4. Mvn deploy 发布项目
  5. Mvn compile 编译源代码
  6. Mvn test 测试
  7. Mvn package 打包
  8. Mvn archetype:generate -DarchetypeCatalog=internal 自动创建maven目录骨架,按提示自动选择
  9. Mvn archetype:generate –DgroupId=组织名,公司网站的反写+项目名
    -DartifactId=项目名-模块名(创建的工程项目名)
    -Dversion=版本号
    -Dpackage=代码所存在的包名
  10. -DskipTests 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下
    -Dmaven.test.skip=true 不执行测试用例,也不编译测试用例类

###问题

  1. Maven创建项目时出现Generating project in Interactive mode就一直卡住
    解:添加-DarchetypeCatalog=internal参数,让他不要从远程服务器上去取catalog
  2. Maven默认使用的jdk是1.5,如何修改
    解:找到setting文件,在相应的位置加入以下代码
  3. 在idea的多模块中,模块B依赖模块A,模块A的jar已经install到本地仓库了,此时运行模块B的compile,报Could not find artifact……错误
    解:由于此时多模块的聚合工程,需要先将依赖的工程都install到本地仓库,所以需先运行主模块的install命令,这是再去compile子模块B就不会报错了。
  4. 在idea中的terminal下,使用mvn出现org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0如此错误
    解:原因是jdk版本太低。只需把系统环境变量的jdk改成1.7+,idea的jdk也相应的做下修改,然后重启一下idea就行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值