Maven精简笔记
Maven基本命令
1.mvn complile
:编译命令,将src/main
目录下的代码以及资源文件进行编译,在项目目录中生成target
目录用来存放编译好的 class 文件等等
2.mvn clean
:清空编译缓存,将生成的target
目录删除,通常情况下当修改代码后未生效就可以尝试清空编译
3.mvn clean complile
:结合命令,在编译之前先清空,推荐使用
4.mvn package
:打包项目,打包好的文件将会放到target
目录下,具体打包格式在pom.xml
文件中配置
5.mvn install
:将 jar 包安装到本地 maven 仓库中
Maven坐标
Maven 坐标是用来区分依赖包的,坐标由【GroupId】组织名称
,【ArtfactId】模块名称
,【Version】版本号
三部分组成,比如:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
除开基本的三个坐标之外,这里在说一下<scope>
标签,它代表着 jar 包的生效范围,常用的属性有三种:
test
:jar包只在测试环境中可以使用,不参与打包compile
:在编译时连同jar包一同编译providid
:正常使用,但不参与打包,告诉maven这个jar包在服务器上已存在
Maven依赖引用
1. Maven 依赖传递原则
我们创建了 Demo1,Demo2 两个 Maven 项目,Demo1 引用了 Demo2,Demo2 引用了 MySQL 驱动,那么这个 MySQL 驱动在 Demo1 中也可以使用
但是如果 Demo2 中使用了<scope>
标签设置生效范围,那么只能引用compile
范围内的 jar 包
2. Maven 依赖的就近原则
这里有 Demo1,Demo2,Demo3 三个 Maven 项目,它们分别引用了不同版本的相同依赖,如果我们的程序是 Demo1 引用了Demo2、然后 Demo2 引用了 Demo3,那么默认使用就近原则,会使用 Demo1 本身的版本,如果 Demo1 中没有,那么默认使用 Demo2 的版本,如果两个依赖的级别相同,那么就会使用<dependencys>
中最先引用的那个依赖中的版本
3. 如何手动排除Jar包?
Demo1 引用了 Demo2,Demo2 中含有多个 jar 包,但是 Demo1 中根本不需要,这时我们就可以通过使用<exclusions>
标签排除部分不需要的 jar 包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 这里排除了Springboot内嵌的Tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
注意事项:只有packaging
为 jar 的工程才能被引用
Maven继承、聚合
Meven 中包含三种打包方式,我们可以通过packaging
标签来修改工程打包方式,打包方式为:
jar
:一般工程打包方式war
:web工程打包方式pom
:不会打包成什么,用来做配置用
Maven继承
创建一个packaging
为 pom 的 Demo1 工程和 jar 类型的 Demo2 工程,在 Demo2 中使用 parent 继承 Demo1,Demo1 中的依赖就会自动继承到 Demo2
如果不希望子工程获取到所有的依赖,在在父工程Demo1中使用<dependencyManagement>
来管理依赖,这样子工程只需要按照自己的需求进行引用,引用父工程中已存在的依赖时可以省略版本号不写
在找不到父工程的情况下可以通过标签的相对路径手动找到父工程
Maven聚合
类似上面的工程,Demo1 作为父工程,Demo2 作为子工程,除了 Demo2 之外可能有多可子工程,当我们需要批量执行 maven 命令时就可以将子工程通过<modules>
进行 maven聚合,聚合后的父工程执行一次clean,所有的子工程都会执行,且父工程可以智能按照依赖级别依次执行
Maven精简笔记的更多相关文章
- Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- JavaScript 精简笔记
JavaScript 精简笔记,摘自 廖雪峰的官方网站. [From] https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51 ...
- Maven学习笔记—仓库
Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...
- MAVEN学习笔记之Maven插件的应用(4)
MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- MAVEN学习笔记之私服Nexus(2)
MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...
- MAVEN学习笔记之基础(1)
MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...
- Maven 学习笔记(二)
前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...
随机推荐
- IDEA如何快速查看类中的属性和方法?
在idea中,当需要快速的查看一个类的所有属性和方法时,直接去代码中查看,就显得非常的麻烦,idea是有快捷键的,可显示所有的属性和方法,方法如下. 打开一个类,使用快捷键ALT+7,就可以在左侧看到 ...
- 小白养成记——Linux中的用户和权限管理
1.用户组管理 每个用户都属于一个用户组,系统可以对一个用户组中的所有用户进行集中管理. 在创建用户时,如果未指定组,则系统会创建一个与用户名同名的组. 以下是关于用户组管理的一些基本命令: 新建用户 ...
- WEB容器开启、关闭OPTIONS方法
发现 请求包随意,响应包信息如下: HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Vary ...
- C++的标识符的作用域与可见性
下面是关于C++的标识符的作用域与可见性学习记录,仅供参考 标识符的作用域与可见性 作用域是一个标识符在程序正文中有效的区域. 作用域分类 ①函数原型作用域 ②局部作用域(快作用域) ③类作用域 ④文 ...
- MySQL 多表查询与事务的操作
表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...
- (数据科学学习手札110)Python+Dash快速web应用开发——静态部件篇(下)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- 新石器时代码农的Typescript开发总结
如果评定前端在最近五年的重大突破,Typescript肯定能名列其中,重大到各大技术论坛.大厂面试都认为Typescript应当是前端的一项必会技能.作为一名消息闭塞到被同事调侃成"新石器时 ...
- 关于搬运CSDN上学生信息管理系统的阅读与二次开发
关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码的解读.二次重开发后程序的介绍和自己在做完对他人代码的解读和重开发后自己的一些感想. 一. 源代码的解读 在本部分的解读中主要分为三部分:该 ...
- 解决springMVC https环境 jstlview redirect时变为http请求的问题
<property name="redirectHttp10Compatible" value="false" />
- Kubernetes 实战 —— 03. pod: 运行于 Kubernetes 中的容器
介绍 pod P53 pod 是 Kubernetes 中最为重要的核心概念,而其他对象仅仅用于 pod 管理. pod 暴露或被 pod 使用. pod 是一组并置的容器,代表了 Kubernete ...