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,所有的子工程都会执行,且父工程可以智能按照依赖级别依次执行

最新文章

  1. jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能
  2. 快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,即USE方法
  3. 递归获取字符串内的所有图片src地址
  4. DBA_Oracle数据库运维监控(案例)
  5. IOS开发的国际化
  6. li添加浮动时不能完全包裹的方法
  7. 开发汉澳即时通信网,2006年上线,QQ死期到了
  8. 【Linux探索之旅】开宗明义+第一部分第一课:什么是Linux?
  9. python基础--异常,对象和迭代器
  10. protobuf和thrift对比
  11. Django的ORM那些相关操作
  12. 网络流24题——分配问题 luogu 4014
  13. java基础知识—字符串
  14. VMware-workstation12.5.6 新建虚拟机 安装 centos6.5
  15. 转载:必须收藏!50个最流行的免费Kubernetes工具集
  16. (4运行例子)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署
  17. 【PyImageSearch】Ubuntu16.04使用OpenCV3.3.0实现图像分类
  18. css中权重与继承
  19. python 正则表达式匹配特定浮点数
  20. JavaScript 闭包的例子

热门文章

  1. SpringBoot接收map类型的参数
  2. MongoDB 在评论中台的实践
  3. [MIT 18.06 线性代数]Intordution to Vectors向量初体验
  4. 翻译:《实用的Python编程》03_04_Modules
  5. MySQL深入研究--学习总结(3)
  6. 【译】Rust宏:教程与示例(二)
  7. python基础学习之元组和字典的功能方法
  8. java实现回溯算法
  9. springmvc 最权威的知识点
  10. 面向对象进阶时,if语句写错位置