MAVEN乱批

maven整理

一、安装(windows)

1、登陆官网:https://maven.apache.org/index.html下载
2、安装
3、设置环境变量
	a)新建:M2_HOME = maven的安装目录
	b)path += %M2_HOME%\bin
	c)MAVEN_OPTS = -Xms128m -Xmx512m	(非必设置)
4、检查安装情况:cmd窗口:mvn -v 
	出现类似信息,则表示安装正常:
	Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
	Maven home: E:\dengk\apache-maven-3.6.3\bin\..
	Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: C:\Program Files\J
	ava\jdk1.8.0_181\jre
	Default locale: zh_CN, platform encoding: GBK
	OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
5、升级:下载新版文件解压,然后修改M2_HOME值指向新安装地址
6、目录结构:
	a)bin : mvn 运行的脚本
	b)boot : 仅1个jar:plexus-classworlds-xxx.jar  是一个类加载器
	c)conf : 包括settings.xml,此文件定制全局maven。该文件不要修改,可复制到"C:\Users\Administrator\.m2"下
	d)lib : maven运行时需要的类库,其中还可以找到内置超级POM
7. ~/.m2:
	* mvn help:system		--打印出所有的java系统属性和环境变量
	a)此文件在登陆用户文件夹下,放置了maven本地仓库:.m2/repository
	b)可将全局settings.xml复制到.m2/下
8、设置http代理:
	在.m2/settings.xml中设置:见settings设置
9、安装m2eclipse
10、eclipse中选新安装的maven,不要选择其自带的

重点:
1.M2_HOME = maven的安装目录
2.path += %M2_HOME%\bin
3.MAVEN_OPTS = -Xms128m -Xmx512m

二、eclipse中的maven

1.右键单击pom--run as 中可以看到常见maven命令,如没有则选maven build自定义命令

三、依赖:

1.传递性
	A依赖B,B依赖C:则A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖
	依赖的范围影响传递性依赖,见下表
				compile		test		privided		runtime
	compile		compile		-			-				runtime
	test		test		-			-				test
	privided	privided	-			privided		privided
	runtime		runtime		-			-				runtime
2.依赖调解:
	a)路径最近优先
	b)第一声明优先
3.可选依赖(不建议使用):
	A->B 且 A->C  称为可选依赖,只对当前项目发生影响,此依赖不会传递
	上述情况可拆分成2个项目,各自设置依赖
4.排除依赖
	A->C B->A  B可显示声明排除对C依赖(如果B不想让它传递过来)
5.归类依赖:使用maven属性设置归类依赖,可用来设置一组相似依赖的版本(如spring-xxx)
	设置属性:
	<properties>
		<propName>propValue</propName>
	</properties>
	引用:
	<version>${propName}</version>
6.优化依赖:
	利用mvn dependency:xxx 系列命令查看依赖,删除,增加依赖,实现优化

四、仓库

1.一般构件路径:groupId/artifactId/version/artifactId-version.packaging(文件名与坐标元素相关)
2.仓库分类:
	本地仓库(1个):.m2/  --可定制地址;可将构件jar复制到本地仓库,根据坐标计算位置(见上)
	远程仓库(多个):
		中央仓库:maven核心自带远程仓库(默认选择)
		私服:一般内部项目用
		其他公用远程仓库:如java.net.Maven库、JBoos Maven库等	
3.远程仓库认证:见settings.xml元素设置
4.部署到远程仓库:
	a)配置pom文件
	b)运行:mvn clean deploy
5.发布版本和快照版本:快照版本用于开发,发布时将快照版本改为发布版本
6.计算最新版本基于groupId/artifactId/maven-metedata.xml文件
	release 最新发布版本
	latest 最新版(包括快照)
	建议不使用上述版本依赖---不稳定
7.镜像:由于网络原因,在别处建立的相同内容的仓库(mirrors).镜像仓库也可以认证
8.仓库搜索服务:Sonatype Nexus,Jarvana,MVNbrowser....

五、生命周期与插件

maven生命周期,每个生命周期可以对应多个插件,有的生命周期对应默认插件,3个生命周期相互独立。
mvn命令主要就是调用maven生命周期的各阶段
1.clean:清理项目
	pre-clean :清理前做些事
	clean:清理上次构建生成的文件
	post-clean :清理后做些事
2.default:构建项目
	validate:
	initalize:
	generate-sources:
	process-sources: 处理主要资源文件,将main/resources目录下文件复制至classpath目录中
	generate-resources:
	process-resources:
	compile:编译主源码
	process-classes:
	process-test-classes:
	generate-test-resources:
	process-test-resources:
	test-compile:编译项目测试代码
	generate-test-classes:
	test:单元测试,不会打包部署
	prepare-package
	package
	pre-integration-test
	integration-test
	post-integration-test
	verify
	install:将包安装本地仓库
	deploy:上传远程仓库	
3.site:建立站点
	pre-site:
	site:生成项目站点文档
	post-site:
	site-deploy:发布站点到服务器上
再说一次,命令就是在调用各生命周期
* 如:mvn clean install 
  调用了clean的2个阶段和default生命周的从validata至install的全部阶段
4.插件:生命周期只是抽像,具体任务由插件来完成。
	插件目标(plugin goal):1个插件可以有n个目标,每个目标对应1个功能
		maven-depandency-plugin有10多个目标,分别对应:
		dependency:analyze
		dependency:tree
		dependency:list ....
		冒号前是插件前缀,后面是目标
5.插件绑定:生命周期与插件(目标)互相绑定,用以完成任务构建
6.内置绑定:maven默认为部分生命周期阶段绑定了插件(有的生命周期对应有插件,有的没有)
	a)default周期的绑定与打包类型相关(类型见pom.packageing)
	b)可从命令行看到执行了哪些插件目标
7.自定义绑定:自定义将某插件绑定到生命周期的某阶段(见pom.plugins),应设置非快照版本
	a)可通过hepl命令查看插件信息
	b)多个插件绑定1个阶段,以声明先后顺序执行
	c)配置:
		I 命令行(非所有插件) -D参数
		例:mvn install-Dmaven.test.skip=true   --将maven.test.skip参数设置为true
		II pom : 实现全局配置(见pom.plugins)
8.插件配置:
	可将1个插件目标配置到多个阶段
9.使用mave-help-plugin描述插件:(见命令)
	目标:describe 查看插件信息
10.目标前缀:简化命令    --如help  代表maven-help-plugin的目标前缀  
11.插件解析:通过前缀能找到对应插件,但前缀未指定坐标,如何找?
	插件查找:先在本地仓库找,再去专门配置的插件远程仓库找(非普通远程仓库),一般配中央仓库。
	插件远程仓库pluginRepositories(settings.xml,pom.xm中均可设置:见settings设置)
	如果为maven官方插件,可省略groupId(不建议)
	版本可省略(因超级pom配置了常用插件版本,自定义的maven会自行判断)(不建议)

六、继承与聚合

maven将项目分成不同的模块,使用聚合与继承简化pom,促进模块配置的一致性。
1.聚合(快速构建):将不同模块聚合在一起,实现多模块的1次性批量构建
	a)额外创建1个聚合模块,将多模块聚合在一起,此模块仅有pom.xml
	b)聚合模块打包必须为pom
	c)通过module元素将子模块聚合(pom.mudule)
	d)一般将聚合模块放在项目目录最高层
2.继承(消除重复):抽取各模块依赖与插件,实现去重,一次声明,多处使用
	a)创建父模块(类似聚合),一般在上一级目录  --当为../时 maven能自动识别
	b)打包为pom
	c)其他模块继承(pom.parent),包括groupId,version,依赖,插件等都可以继承
	d)将父子模块均加入到聚合模块
	e)技巧:父模块使用pom.dependcyManagement配置dependencies依赖,子模块重写需要的dependencies  --插件用法相同:见pluginManagement配置
		I dependcyManagement会被继承,但不会引入依赖
		II 子模块中重新声明依赖,可实现某些子模块无须继续父模块的所有依赖
		III 保证版本统一性,父模块将版本设置为变量,由dependcyManagement取出,子模块继承后无需再写版本号
原则:
	a).1个项目子模块都就具有相同groupId,version;artifactId使用一致前缀
	b).实际项目中,一个模块可能既是聚合又是父POM

*约定优于配置:遵守maven约定(超级pom已定义好)
3.反应堆:根据各模块及其之间关系,形成的构建顺序
	a)不能出现循环
	b)可以裁剪反应堆:仅构建部分模块(见mvn命令),加入参数实现不同构建(详P541)
		-mvn -h		--查看所有选项
		其中:
		-am --also-make		--同时构建所列模块的依赖模块
		-amd -also-make-dependents 	--同时构建依赖于所列模块的模块
		-pl --projects <arg>	--构建指定模块,用逗号分隔
		-rf -resume-from <arg>	--从指定模块回复反应堆
		例:
		mvn clean install -pl account-email,account-persist
		mvn clean install -pl account-email -amd
  • settings.xml元素设置:

localRepository:设置本地仓库地址如:D:\java\xxx
	repositories : 仓库组,下可配置多个仓库
	repository :仓库,可多个
	<repository>
		id: 仓库id唯一
		name:
		url:
		releases:	发布版本
		enabled:开/关
			updatePolicy:  检查更新频率 -- daily 每天,never  从不,always 每次,interval:X  每X分钟
			checksumPolicy: 检查检验和文件策略 ,默认warn --warn 检验失败则警告,fail 构建失败,ignore 忽略校验和错误
		snapshots : 快照版本
			enabled:开/关
			updatePolicy:同上
			checksumPolicy:同上
		layout : 布局方式(一般填:default)
	</repository>
	插件远程仓库:
	pluginRepositories:
		pluginRepositorie:
			--此处配置同repository
	仓库认证:
	<servers>
		<server>
			id:必须与repository元素中id完全一致,2者是对应的
			username:
			password:
		</server>
	</servers>
	mirrors: 
		mirror:
			id:
			name:
			url:
			mirrorOf:源仓库的名称  --*表示对所有仓库镜像,其他高级参数见p346
	proxies:代理
	<proxies>	<!--可配置多个代理-->
		<proxy>
			<id>my-proxy</id>
			<active>true</active>		<!--表示激活代理-->
			<protocol>http</protocol>	<!--代理协议-->
			<host>218.14.227.197</host>	
			<port>3128</port>
			<!--
			<username>***</username>
			<password>***</password>
			<nonProxyHosts>repostitory.mycom.com|*.google.com</nonProxyHosts> 表示哪些主机名不需要代理,用|号分隔,可用通配符*
			-->
		</proxy>
	</proxies>
  • maven 命令:

    基本用法:mvn [options] [<goal(s)>] --goal表示在哪个阶段执行
    mvn -v : maven环境信息
    mvn clean : clean表示清理输出目录(target)
    mvn compile : 编译项目主代码
    mvn test : 执行测试
    mvn clean package : 打包,将项目打包成jar,放在target目录中
    mvn clean install : 安装,将输出的jar安装到本地仓库,此后可以由所有Maven项目使用
    mvn archetype:generate : 利用archetype生成项目骨架
    mvn dependency:list : 显示当前项目的所有依赖关系(列表)
    mvn dependency:tree : 显示当前项目的所有依赖关系(树)
    mvn dependency:analyze : 列出使用但未声明的依赖和声明但未使用的依赖
    mvn clean deploy : 将项目输出的构件配置到远程仓库
    mvn help:describe-Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1-Detail --可省去版本信息,自动找最新

  • pom文件配置 maven 元素:

    modelVersion:maven当前模型(与maven版本相关)

    • maven坐标(5元素)
groupId:(项目/模块/构件)组  --类似1个传统项目 必须
	artifactId:组中唯一的ID(项目/模块/构件ID)  --类似1个传统项目的模块,必须
	version:版本号  --1.0-SNAPSHOT  意为快照,必须
	packageing : 打包方式,与包扩展名对应  --jar , war , pom, maven-plugin, ear 等,默认jar,非必设置
	classifier : 包中的附属构件(对应主构件)  --包括 jar,javadoc等,不能直接定义,需附属于主构件,由附加插件生成 非必须
	
    name:项目名称
	
	dependencies:依赖组,下面可包括多个dependency(依赖)元素
	<dependencies>
		dependency : 依赖元素
		<dependency>
			groupId,artifactId,version  : 根据坐标才能找到依赖
			type : 依赖类型,坐标对应的packaging  --默认jar,非必设置
			scope : 依赖的范围 (编译classpath,测试classpath,运行classpath)
				--compile 编译,test 测试
				--provided  编译、测试
				--runtime 测试、运行
				--system 范围与provided完全一致,但必须通过systemPath显示指定,
				system 例:
					<scope>system</scope>
					<systemPath>$ {java.home}/lib/rt.jar</systemPath>
				--import 导入依赖范围(8.3.3)
			optional : 标记依赖是否可选 (5.9.1)
			exclusions : 排除传递性依赖 --排除传递性依赖中的某些依赖.只需声明排除的groupId,artifactId即可
		</dependency>
	</dependencies>
	发布版本到远程仓库设置:
	<distributionManagement>
		<!--多个,发布版本-->
		<repository>
			id:
			name:
			url:
		</repository>
		<!--多个,快照版本-->
		<snapshotRepository>
			id:
			name:
			url:
		</snapshotRepository>
	</distributionManagement>
	自定义绑定:自定义将某插件绑定到生命周期的某阶段
	build:
		plugins:
			plugin:
				groupId:
				artifactId:
				version:
				exclusions:
					exclusion:	--执行配置
						id:
						phase:	--生命周期阶段;有时无此项也可绑定,是因为有的插件默认绑定了阶段,可通过命令查看插件详情
						goals:
							<goal>xxx</goal> --xxx:插件目标,如jar-no-fork
	聚合:
	modules:
		module:	--填写子模块的相对目录地址
	继承:
	parent:
		3坐标:
		relativePath:	--父模块相对路径(默认../pom.xml)
	依赖配置: --不会真导入依赖,只是一种配置,其中值可被真实依赖调用
	dependcyManagement:
		dependcys: ...
	插件配置: --不会真导入插件,只是一种配置,其中值可被真实插件调用
	pluginManagement:
		plugins: ....

七、Idea使用

1.设置更新
  • https://blog.csdn.net/weixin_44504146/article/details/99444067
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值