maven详解

maven深入介绍

maven依赖范围对传递依赖的影响

比如A依赖B、B依赖C、C可能是A的依赖传递,如下面表格所示:

直接依赖/传递依赖compileprovidedruntimetest
compliecompile-runtime-
providedprovidedprovidedprovided-
runtimeruntime-runtime-
testtest-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项目发布与下载(基于私服)

下载、安装好nexus,cmd进入 bin 目录,执行nexus.bat start,查看 nexus 的配置文件 conf/nexus.properties;
#Jetty section
application-port=8081 #nexus 的访问端口配置
application-host=0.0.0.0 #nexus 主机监听配置(不用修改)
nexus-wbapp=KaTeX parse error: Expected 'EOF', got '#' at position 46: … #̲nexus 工程目录 #Nex…{bundleBasedir}/…/sonatyoe-work/nexus #nexus 仓库目录
runtime=${bundleBasedir}/nexus/WEB-INF #nexus 运行程序目录
访问:http://localhost:8081/nexus/
点击右上角的 log in,输入账号和密码(内置账号:admin/admin123)登陆
nexus的4种仓库类型

  1. hosted,相当于本地仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、Snaphots公司内部测试版本仓库
  2. proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服字段去中央仓库下载jar包或者插件
  3. group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组
  4. virtual(虚拟):兼容Maven1版本的jar或者插件

将项目发布到私服或从私服下载

->发布
5. 配置:首先修改settings.xml文件,配置连接私服的用户和密码
settings配置
6. 配置项目pom.xml
根据工程的版本号决定上层到哪个宿主仓库(release/snapshot),pom.xml中的id与settings.xml中的id对应
pom配置
->下载
7. settings.sml中配置私服的仓库配置1
配置2
配置完成后,eclipse查看有效pom,有效pom是maven软件最终使用的pom内容,有效pom内容如下:pom内容中有两个仓库地址,maven会从前边的仓库的找,如果找不到jar包再从下边的找,从而就实现了从私服下载jar包
图1
图2

maven中pom.xml元素详解

  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系统属性和环境变量属性;
    内置属性:两个常用内置属性 b a s e d i r 表 示 项 目 跟 目 录 , 即 包 含 p o m . x m l 文 件 的 目 录 ; {basedir} 表示项目跟目录,即包含pom.xml文件的目录; basedirpom.xml{version} 表示项目版本
    pom属性:
    ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/
    ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/
    ${project.build.directory} : 项目构建输出目录,默认为target/
    ${project.outputDirectory} : 项目主代码编译输出目录,默认为target/classes/
    ${project.testOutputDirectory}:项目测试主代码输出目录,默认为target/testclasses/
    ${project.groupId}:项目的groupId
    ${project.artifactId}:项目的artifactId
    p r o j e c t . v e r s i o n : 项 目 的 v e r s i o n , 与 {project.version}:项目的version,与 project.versionversion,{version} 等价 p r o j e c t . b u i l d . f i n a l N a m e : 项 目 打 包 输 出 文 件 的 名 称 , 默 认 为 {project.build.finalName}:项目打包输出文件的名称,默认为 project.build.finalName{project.artifactId}- p r o j e c t . v e r s i o n s e t t i n g 属 性 : 与 P O M 属 性 同 理 , 用 户 使 用 以 s e t t i n g s . 开 头 的 属 性 引 用 s e t t i n g s . x m l 文 件 中 的 X M L 元 素 的 值 。 j a v a 属 性 : 所 有 j a v a 系 统 属 性 都 可 以 用 M a v e n 属 性 引 用 , 如 {project.version} setting属性: 与POM属性同理,用户使用以settings. 开头的属性引用settings.xml文件中的XML元素的值。 java属性: 所有java系统属性都可以用Maven属性引用,如 project.versionsettingPOM使settings.settings.xmlXMLjavajavaMaven{user.home}指向了用户目录。
    环境变量属性:
    所有环境变量属性都可以使用以env. 开头的Maven属性引用,如${env.JAVA_HOME}指代了JAVA_HOME环境变量的的值。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值