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精简笔记的更多相关文章

  1. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  2. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  3. JavaScript 精简笔记

    JavaScript 精简笔记,摘自 廖雪峰的官方网站. [From] https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51 ...

  4. Maven学习笔记—仓库

    Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...

  5. MAVEN学习笔记之Maven插件的应用(4)

    MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...

  6. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  7. MAVEN学习笔记之私服Nexus(2)

    MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...

  8. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

  9. Maven 学习笔记(二)

    前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...

随机推荐

  1. Dyno-queues 分布式延迟队列 之 辅助功能

    Dyno-queues 分布式延迟队列 之 辅助功能 目录 Dyno-queues 分布式延迟队列 之 辅助功能 0x00 摘要 0x01 前文回顾 0x2 Ack机制 2.1 加入Un-ack集合 ...

  2. 2021-2-26:为什么需要 System.gc() ?

    JVM 默认启动参数中,DisableExplicitGC 为 false,ExplicitGCInvokesConcurrent 为 false,对于大多数 GC (除了 ZGC 的其他 GC,包括 ...

  3. RabbitMQ(三) SpringBoot2.x 集成 RabbitMQ

    3-1 RabbitMQ 整合 SpringBoot2.x 生产者发送消息 创建 SpringBoot 项目application.properties 配置 spring.rabbitmq.host ...

  4. Django 页面缓存的cache_key是如何生成的

    页面缓存 e.g. @cache_page(time_out, key_prefix=key_prefix) def my_view(): ... 默认情况下,将使用配置中的default cache ...

  5. Apache配置 4.访问日志

    (1)介绍 访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题. (2)配置 # vi /usr/local/apache2.4/conf/extra/httpd- ...

  6. [SNOI2019] 通信

    一.题目 点此看题 二.解法 一看就是傻逼补流模型,不会真的有人这个图都建不出来吧 别走啊,我不阴阳怪气了,如果你不知道怎么建这里有图嘛(思路来源是餐巾计划问题): 其中标红的边数量级很大,因为 \( ...

  7. go beego框架与python实现数据交互

    目标:将go中一个二维数组传到pythone中处理并返回.难点在于数据格式的转换. go代码如下: package main import ( "os/exec" "sy ...

  8. python--requests模块详解

    GET请求 首先构造一个最简单的get请求,请求的链接为http://httpbin.org/get import requests 2 r = requests.get("http://h ...

  9. MyBatis的XML配置文件

    属性(properties) 通过properties的子元素设置配置项: <properties> <property name="driver" value= ...

  10. c++ 反汇编 构造函数和析构函数

    构造函数和析构函数出现的时机 局部对象 109: // 局部对象定义调用构造函数 110: 111: CNumber Number; 00C8A37D 8D 4D EC lea ecx,[Number ...