maven详解
maven深⼊介绍
maven依赖范围对传递依赖的影响
⽐如A依赖B、B依赖C、C可能是A的依赖传递,如下⾯表格所⽰:
直接依赖/传递依赖compile provided runtime test complie compile-runtime-
provided provided provided provided-
runtime runtime-runtime-
test test-test-
最左边⼀列为直接依赖,理解为A依赖B的范围,最顶层⼀⾏为传递依赖,理解为B依赖C的范围,⾏与列的交叉即为A传递依赖C的范围
⽐如1:A对B有 compile 依赖,B 对 C 有 runtime 依赖,那么根据表格所⽰ A 对 C 有runtime 依赖。
⽐如2:maven-dao 依赖 junit,scop 为test;maven-service 依赖 maven-dao;那么maven-dao ⼯程所依赖的junit 的 jar 没有加⼊到maven-service ⼯程。
⽐如3:maven-dao ⼯程依赖 junit 的 scop 为 complie,maven-dao ⼯程所依赖的 junit的 jar 包会加⼊到 maven-service ⼯程中maven项⽬发布与下载(基于私服)
1. hosted,相当于本地仓库,部署⾃⼰的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、
Snaphots公司内部测试版本仓库
2. proxy,代理仓库,⽤于代理远程的公共仓库,如maven中央仓库,⽤户连接私服,私服字段去中央仓库下载jar包或者插件
3. group,仓库组,⽤来合并多个hosted/proxy仓库,通常我们配置⾃⼰的maven连接仓库组
4. virtual(虚拟):兼容Maven1版本的jar或者插件
将项⽬发布到私服或从私服下载
->发布
5. 配置:⾸先修改l⽂件,配置连接私服的⽤户和密码
6. 配置项⽬l
根据⼯程的版本号决定上层到哪个宿主仓库(release/snapshot),l中的id与l中的id对应
->下载
7. settings.sml中配置私服的仓库
配置完成后,eclipse查看有效pom,有效pom是maven软件最终使⽤的pom内容,有效pom内容如下:pom内容中有两个仓库地址,maven会从前边的仓库的,如果不到jar包再从下边的,从⽽就实现了从私服下载jar包
maven 中l 元素详解
1. modelVersion模块版本
2. modules引⼊⼦模块
3. parent引⼊⽗模块(packaging为pom),改模块属于聚合体
4. dependencyManagement,既能让⼦模块继承到⽗模块的依赖配置,⼜能保证⼦模块依赖使⽤的灵活性。在
dependencyManagement元素下得依赖声明不会引⼊实际的依赖,不过它能够约束dependencies下的依赖使⽤,主要作⽤是:使⽤dependencyManagement能够统⼀项⽬范围中依赖的版本,当依赖版本在⽗POM中声明后,⼦模块在使⽤依赖的时候就⽆须声明版本,也就不会发⽣多个⼦模块使⽤版本不⼀致的情况,帮助降低依赖冲突的⼏率;
5. import只在dependencyManagement元素下才有效果,作⽤是将⽬标POM中的dependencyManagement配置导⼊并合并到当前
POM的dependencyManagement元素中
6. properties:通过元素⽤户可以⾃定义⼀个或多个Maven属性,然后在POM的其他地⽅使⽤${属性名}的⽅式引⽤该属性,这种做法的
最⼤意义在于消除重复和统⼀管理。
Maven总共有6类属性,内置属性、POM属性、⾃定义属性、Settings属性、java系统属性和环境变量属性;
内置属性:两个常⽤内置属性 {version} 表⽰项⽬版本pom属性:
${project.build.sourceDirectory}:项⽬的主源码⽬录,默认为src/main/java/${stSourceDirectory}:项⽬的测试源码⽬录,默认为src/test/java/${project.build.directory} : 项⽬构建输出⽬录,默认为target/
${project.outputDirectory} : 项⽬主代码编译输出⽬录,默认为target/classes/
${stOutputDirectory}:项⽬测试主代码输出⽬录,默认为target/testclasses/${upId}:项⽬的groupId ${project.artifactId}:项⽬的artifactId
{version} 等价{project.artifactId}-
maven打包本地jar包{user.home}指向了⽤户⽬录。环境变量属性:
所有环境变量属性都可以使⽤以env. 开头的Maven属性引⽤,如${env.JAVA_HOME}指代了JAVA_HOME环境变量的的值。
basedir 表⽰项⽬跟⽬录,即包含pom .xml ⽂件的⽬录;project .version :项⽬的version ,与project .build .finalName :项⽬打包输出⽂件的名称,默认为
project .versionsetting 属性:与POM 属性同理,⽤户使⽤以settings .开头的属性引⽤settings .xml ⽂件中的XML 元素