IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Maven进阶, -> 正文阅读

[Java知识库]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 包冲突。
欲知详情参考视频
在这里插入图片描述

在这里插入图片描述
配置方式<exclusions>标签配置依赖的排除

        <dependency>
            <groupId>com.atguigu.maven</groupId>
            <artifactId>pro01-maven-java</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
            <!-- 使用excludes标签配置依赖的排除	-->
            <exclusions>
                <!-- 在exclude标签中配置一个具体的排除 -->
                <exclusion>
                    <!-- 指定要排除的依赖的坐标(不需要写version) -->
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

继承

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实操:运行 mvn archetype:generate 命令来创建模块工程。
在这里插入图片描述
在这里插入图片描述
创建好之后修改父工程打包方式 删除测试的依赖
在这里插入图片描述

在父工程里模拟创建3个子工程
在这里插入图片描述
在这里插入图片描述
创建完3个子工程发现父工程pom自动多了如下内容
下面 modules 和 module 标签是聚合功能的配置
在这里插入图片描述
先去看看子工程:解读子工程的pom.xml
在这里插入图片描述

<!-- 使用parent标签指定当前工程的父工程 -->
<parent>
	<!-- 父工程的坐标 -->
	<groupId>com.atguigu.maven</groupId>
	<artifactId>pro03-maven-parent</artifactId>
	<version>1.0-SNAPSHOT</version>
</parent>

<!-- 子工程的坐标 -->
<!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
<!-- <groupId>com.atguigu.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->

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

使用dependencyManagement标签配置对依赖的管理,被管理的依赖并没有真正被引入到工程
在这里插入图片描述

<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
	</dependencies>
</dependencyManagement>

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

<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。	-->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-expression</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
	</dependency>
</dependencies>

我们知道父工程配好了版本号子工程可以不写,那么写了会怎么样几种情况无外乎如下图所示:
在这里插入图片描述
你也可以去子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 包引入
顺着视频看吧

创建Maven,SpringBoot子工程

这篇博客介绍的挺详细我就不赘述了
在这里插入图片描述

课外题

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

为什么要统一返回数据格式
在这里插入图片描述
分布式、SOA、微服务、SpringBoot关系

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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:48:02  更:2022-05-21 18:49:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:28:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码