栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Maven进阶,

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Maven进阶,

标题
  • 纯命令创建maven项目:
  • 关于maven中依赖范围如何验证测试
  • 测试依赖的传递性
  • 测试依赖的排除
  • 继承
    • 在父工程中配置依赖的统一管理
  • 聚合(部分组成整体)
  • 在IDEA中执行Maven命令
  • 生命周期
  • 导入Maven项目
  • 仓库
  • 生成微服务可运行jar包
  • 超级POM大揭秘
  • 版本仲裁
  • 自定义maven插件
  • 课外题

资料来源

这里我不在介绍基本概念了,放一些核心干货
需要基本概念请参考;

我们知道所有的核心都在pom.xml中,所以一步步看这个pom文件各个标签




下面这个图我解释一下:
我们先创建了个maven java项目,然后我们通过mvn install 把这个jar包安装到我们本地仓库,
现在新建个maven web项目,pom引入 我java项目中的jar(通过依赖中的坐标)
然后打包就会发现lib下有个java项目的jar包

纯命令创建maven项目:

用命令构建普通java项目:mvn archetype:generate

第一次会下载一会,过会会让你选择一个模板 7 走默认即可
然后会让你填写那三个坐标

用命令构建普通Web项目:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

用命令查看当前Web工程所依赖的jar包的列表:mvn dependency:list

以树形结构查看当前Web工程的依赖信息:mvn dependency:tree

关于maven中依赖范围如何验证测试

可选值以下6个
import含义可参考此视频

runtime

汇总

先说如何测试:核心思想就是 在对应目录引入它范围jar包中类,然后执行编译,看编译报不报错
具体如下,首先我这个项目有如下几个作用范围


验证compile在 main目录(空间) 有效:在main目录(空间)引入compile范围的jar包中的类

接下来验证compile在 test目录(空间) 有效:在test目录(空间)引入compile范围的jar包中的类


接下来验证compile在 开发过程(时间) 有效:
这个就是开发中你导入IDEA后,我能不能点出提示,能出来自然有效。正常来说开发过程中都是有效的,但是runtime范围是个特例。
这个就是开发的时候我们用不到具体实现,等运行的时候才会用到具体实现。

接下来验证compile在 部署到服务器(时间) 有效: 去看打完包后lib下有没有对应jar包

验证test在 main目录(空间) 无效:在main目录(空间)引入test范围的jar包中的类

其他的验证我这里都不赘述了,开发中基本上99%都是compile范围,既然占比这么大都设置为compile(默认就是此范围)行不行?

其实人间提供这个scope标签就是为了去除test、provided,为什么要去除?
比如说test你只是测试用到,你部署到服务器,那不是增加服务器的负担了(你把无关jar包一股脑扔到服务器上上,显得乱,服务器压力增加,性能就会降低,开发维护也不方便)
再看看provided,已提供的,人家都有了你就没必要打包进去,你非要,那可能就会造成冲突,到时候代码报错,这就不好排查了啊,jar包里面源码也不是直接能改的,你动人家源码,你这个解决问题的方法就不对,这就是你jar冲突导致的,它表面上抛出的异常就不是你解决问题的一个思路方向。
当然你也不用顾虑我不知道jar包的依赖范围怎么办?
你去maven官网搜jar包的时候,人家把作用范围都写好了,你直接复制即可。

测试依赖的传递性

这块不好书写建议视频学习
依赖的传递性
A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C?


验证:这块不好书写建议视频学习

这也就是为什么SpringBoot为什么引入几个start就能完事,它就利用了Maven的依赖传递性

测试依赖的排除

配置依赖的排除其实就是阻止某些 jar 包的传递。因为这样的 jar 包传递过来会和其他 jar 包冲突。
欲知详情参考视频


配置方式标签配置依赖的排除

        
            com.atguigu.maven
            pro01-maven-java
            1.0-SNAPSHOT
            compile
            
            
                
                
                    
                    commons-logging
                    commons-logging
                
            
        
继承



实操:运行 mvn archetype:generate 命令来创建模块工程。


创建好之后修改父工程打包方式 删除测试的依赖

在父工程里模拟创建3个子工程


创建完3个子工程发现父工程pom自动多了如下内容
下面 modules 和 module 标签是聚合功能的配置

先去看看子工程:解读子工程的pom.xml



	
	com.atguigu.maven
	pro03-maven-parent
	1.0-SNAPSHOT





pro04-maven-module

在父工程中配置依赖的统一管理

使用dependencyManagement标签配置对依赖的管理,被管理的依赖并没有真正被引入到工程




	
		
			org.springframework
			spring-core
			4.0.0.RELEASE
		
		
			org.springframework
			spring-beans
			4.0.0.RELEASE
		
		
			org.springframework
			spring-context
			4.0.0.RELEASE
		
		
			org.springframework
			spring-expression
			4.0.0.RELEASE
		
		
			org.springframework
			spring-aop
			4.0.0.RELEASE
		
	

子工程中引用那些被父工程管理的依赖 关键点:省略版本号





	
		org.springframework
		spring-core
	
	
		org.springframework
		spring-beans
	
	
		org.springframework
		spring-context
	
	
		org.springframework
		spring-expression
	
	
		org.springframework
		spring-aop
	

我们知道父工程配好了版本号子工程可以不写,那么写了会怎么样几种情况无外乎如下图所示:

你也可以去子pom对应标签配置,定义子pom想要的版本,配了会覆盖副版本哦

聚合(部分组成整体)

聚合测试视频



在IDEA中执行Maven命令

先看看maven下的这几个常用图标含义


至于Plugins就是maven的插件 ,它跟Lifecycle关系是 Lifecycle中的插件就是绑定的Plugins中的插件
Dependencies 就是所有引入的依赖常用来查看某个模块的依赖信息

第一种 找到maven 直接执行 这个大家都会没啥可说的

手动输入,你点M那个图标进来后,下面有很多提示命令,点一下就会填充此命令到输入框,
如果没有你想用的命令模板就自己收到敲,后回车执行
多模块项目注意要考虑一下命令的执行范围呦


当然你也可以在IDEA终端运行maven命令,前提是在对应pom里 你可以通过cd命令进入也可以如下快速到此目录下,

这块我输入maven命令报错了(‘mvn’ 不是内部或外部命令),然后我用cmd在此目录下执行maven命令没有问题,百度给出解决方案,我也是这么解决的。(网上说环境变量什么的我觉得自己cmd能出来就没问题,就没参考)直接管理员身份运行完美解决问题

# -D 表示后面要附加命令的参数,字母 D 和后面的参数是紧挨着的,中间没有任何其它字符
# maven.test.skip=true 表示在执行命令的过程中跳过测试
mvn clean install -Dmaven.test.skip=true

下面几个比较常用:
maven常用命令

1. 跳过测试:-Dmaven.test.skip(=true)

2. 指定端口:-Dmaven.tomcat.port=9090

3. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,
一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.

4.只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
( -skipping 的灵活运用,当然也可以用于其他组合命令) 
生命周期

对应视频

导入Maven项目

感兴趣请参考笔记

这块我说一下,分工程导入跟模块导入 导入Maven项目作为单独的一个项目,你就需要单独开个窗口,还得设置好maven依赖。平时练习的话我建议都放在一个工程项目里,设置一次maven依赖,我们只需要引入模块即可,这样很多个模块 项目都用一个窗口,方便管理。

如果你是引入模块的话,注意修改一下 pom.xml

如果是web工程你还得去看看,反正多点点看看里面有没有版本不合适的,爆红的,改改

仓库

建议听下下Nexus作用

父级

生成微服务可运行jar包

学习视频

超级POM大揭秘

破案视频

版本仲裁

视频

自定义maven插件

对应文档
视频1
视频2

还有默认 profile、搭建 Maven 私服:Nexus、第二节、体系外 jar 包引入
顺着视频看吧

课外题

配置文件为什么要放到Web工程里面?

为什么要统一返回数据格式

分布式、SOA、微服务、SpringBoot关系

我的项目作为你war下lib的jar上一讲听下可以串起来

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号