重量级 | 重量级!Maven史上最全教程,看了必懂
Hi! 我是小小,今天是本周的第一篇,本周第一篇主要内容是maven项目的创建和使用。
前言
为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven
为什么要使用maven
在开发中经常需要依赖第三方包,包与包之间存在依赖关系,版本之间存在兼容问题,还有需要把包进行升级和降级,当项目复杂到了一定程度的时候,需要对包进行管理。maven是当前最受欢迎的自动化综合工具,类似的还有ant,npm,nuget,composer。maven提供了开发人员构建一个完整生命周期的框架,开发团队可以自动化的完成项目的基础工具建设,maven使用标准目录结构和默认构建生命周期, 因此maven是一个项目管理工具。主要做了以下几件事情
统一开发规范与工具。
统一管理jar包
maven生命周期
maven把项目构建划分为不同的生命周期,它这个过程包括编译,测试,打包,集成测试,验证,部署,maven的所有执行动作都需要指明自己在这个过程的执行位置,然后在maven执行的时候,依照过程的发展依次调用包进行处理。这个是maven的一个基本的调度机制,
maven的标准工程结构
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main|-- java(java源代码目录)|-- resources(资源文件目录)
|-- test|-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)|-- classes(编译后的class文件存放处)
Maven的约定优于配置
所谓的约定优于配置,在maven中,并不是完全不可以修改,他们只是一些配置的默认值。每一个阶段的任务都知道自己要这么正确的完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出的class文件存放到target/classes文件中。对于maven来说,采用约定优于配置,可以减少工作量,降低学习成本。
Maven版本规范
groupId - 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着 JAVA 的包的结构。例如 org.apache artifactId - 单独项目的唯一标识符。比如我们的 tomcat, commons 等。不要在 artifactId 中包含点号(.)。version - 一个项目的特定版本。packaging - 项目的类型,默认是 jar,描述了项目打包后的输出。类型为 jar 的项目产生一个 JAR 文件,类型为 war 的项目产生一个 web 应用。
maven版本规范一般定义为
<major version>、<minor version>、<incremental version>-<qualifier>
处理逻辑的版本号为
SNAPSHOT - 这个版本一般用于开发过程中,表示不稳定的版本。
LATEST - 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个 snapshot 版,具体看哪个时间最后。
RELEASE - 指最后一个发布版。
安装
配置环境变量
(1)解压压缩包(以 apache-maven-3.3.9-bin.zip 为例)
(2)添加环境变量 MAVEN_HOME,值为 apache-maven-3.3.9 的安装路径(3)在 Path 环境变量的变量值末尾添加%MAVEN_HOME%bin
(4)在 cmd 输入 mvn –version,如果出现 maven 的版本信息,说明配置成功。
本地仓储配置
从中央仓库下载的jar包都会统一的保存在本地仓库中,我们需要配置本地仓库的位置。在conf目录下的setting.xml文件。
第一个maven工程
在 Intellij 中创建 Maven 工程
(1)创建 Maven 工程
依次点击 File -> New -> Project 打开创建工程对话框,选择 Maven 工程。(2)输入项目信息(3)点击 Intellij 侧边栏中的 Maven 工具界面,有几个可以直接使用的 maven 命令,可以帮助你进行构建。
Maven 命令构建方式
进入工程目录,输入maven命令
使用指导
添加外部依赖 jar 包
在maven工程中添加 jar 包,只需要在 pom 文件中引入对应的标签即可。
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zp.maven</groupId><artifactId>MavenDemo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>MavenDemo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><junit.version>3.8.1</junit.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version><scope>compile</scope></dependency></dependencies>
</project>
标签具有四个属性。
<groupId> - 项目组织唯一的标识符,实际对应 JAVA 的包的结构。
<artifactId> - 项目唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
<version> - jar 包的版本号。可以直接填版本数字,也可以在 properties 标签中设置属性值。
<scope> - jar 包的作用范围。可以填写 compile、runtime、test、system 和 provided。用来在编译、测试等场景下选择对应的 classpath。
如何寻找 jar 包
在 mvnrepository.com 站点搜寻你想要的 jar 包版本
使用 maven 插件
要添加 Maven 插件,可以在 pom.xml 文件中添加标签。
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin></plugins>
</build>
一次编译多个工程
需要创建一个父 maven 工程,它有两个字工程,my-app,my-webapp
+- pom.xml
+- my-app
| +- pom.xml
| +- src
| +- main
| +- java
+- my-webapp
| +- pom.xml
| +- src
| +- main
| +- webapp
app 工程的pom.xml 如下,重点在于 modules 中引入了两个子 module
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mycompany.app</groupId><artifactId>app</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>my-app</module><module>my-webapp</module></modules>
</project>
选择编译 某某 时,会依次对它所有的 module 执行相同的操作。
如何打包一个可以直接运行的Spring Boot jar 包
可以使用 Spring-boot-maven-plugin 插件
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>
如果引入了第三方jar包,如何打包 首先,添加依赖
<dependency><groupId>io.github.dunwu</groupId><artifactId>dunwu-common</artifactId><version>1.0.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/dunwu-common-1.0.0.jar</systemPath>
</dependency>
然后配置插件
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins>
</build>
最佳实践
通过 bom 统一管理版本 使用类似 spring-boot-dependencies的方式统一管理依赖版本 spring-boot-dependencies的pom.xml的形式
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<packaging>pom</packaging><!-- 省略 --><!-- 依赖包版本管理 -->
<dependencyManagement><dependencies><!-- 省略 --></dependencies>
</dependencyManagement><build>
<!-- 插件版本管理 -->
<pluginManagement><plugins><!-- 省略 --></plugins>
</pluginManagement>
</build>
</project>
其他项目中,通过引入来管理依赖
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
关于作者
我是小小,一个生于二线,活在一线城市的程序猿,我是小小,我们下期再见。
小明菜市场
推荐阅读
● 缓冲区 | 没吃透Netty 缓冲区,还能算得上Java老司机?
● MySql | 为什么大家都在说 Select * 效率低
● k8s | 搞不明白为什么大家都在学习 k8s
● 对战 | RabbitMq 大战 kafka
● 执行流程 | 你真的了解Spring AOP的执行顺序吗?
给我个好看再走好吗?
重量级 | 重量级!Maven史上最全教程,看了必懂相关推荐
- maven添加子工程_重量级!Maven史上最全教程,看了必懂
作者 | 小明菜市场来源 | 小明菜市场(ID:fileGeek)头图 | CSDN 下载自东方IC 前言 为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven ...
- 重量级!Maven史上最全教程,看了必懂
作者 | 小明菜市场 来源 | 小明菜市场(ID:fileGeek) 头图 | CSDN 下载自东方IC 前言 为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍mave ...
- 新唐单片机 ICP 史上最全教程
新唐单片机 ICP 史上最全教程 新唐单片机 ICP烧录教程 目录 新唐单片机 ICP 史上最全教程 1.ICP软件安装 2.连接设备 3.设备供电 4.开启软件 5.欢迎界面 6.补充事项 7.建立 ...
- linux如何解压.z文件,linux文件解压缩命令(史上最全教程)
1. 前言 本文主要讲解linux文件解压缩命令,史上最全总结. 2. Linux如何打包目录和解包: tar cvf FileName.tar DirName 解包tar文件: tar xvf Fi ...
- Maven史上最全总结
maven基础概念 参考文章:https://blog.csdn.net/wwwwwww31311/article/details/114323704 一 maven的安装配置 安装配置参考:http ...
- GitHub Pages + Hexo搭建个人博客网站,史上最全教程
文章目录 一.准备工作 1. GitHub账号 2. 安装Git 3. 安装NodeJS 二.创建仓库 三.安装Hexo 四.更换主题 1. NexT 主题 2. Fluid主题 五.创建文章 六.个 ...
- 史上最全教程没有之一,微信小程序使用云开发解决微信支付问题,我走了几天几夜的弯路啊
我现在用云开发平台,想实现微信支付功能: 微信支付的前提 1.你的小程序开通了支付功能或者,你的小程序关联了商户号 2.你的小程序能开通支付功能,一般都是非个人类型的小程序 准备工作 1.获取小程序的 ...
- Linux史上最全教程
一. Linux简介 1.硬件和软件 我们所熟知的计算机是由硬件和软件组成. 硬件:计算机系统中由电子,机械和光电子元件等组成的各种物理装置装置的统称: 简单来说硬件就是看得见摸得到的. 软件:是用户 ...
- screen史上最全教程
当我们用xshell连接远程服务器时候,可能会遇到网络问题,导致中断连接,此时我们可以使用screen软件去管理会话. 1.首先需要安装screen apt-get install screen 2 ...
最新文章
- 史上最强 NIO 框架,没有之一!!!
- putty php环境搭建,centos7(linux)系统下php搭建环境和创建laravel项目
- OpenGL油画效果
- 字节跳动屡战社交,这次抖音亲自上场了
- Gradle多项目构建–类似父pom的结构
- leetcode292. Nim 游戏
- springcloud 相同服务名_浅谈分布式与微服务
- composer中文阿里云镜像地址
- linux基本命令示例_Linux正常运行时间命令示例
- android 下载网络图片并缓存
- 编译问题处理:undefined symbol: OPENSSL_init_crypto
- linux系统——hadoop环境搭建
- VTK:线宽用法实战
- 一文带你看透IP归属地
- 计算机网络——数字信号(五)
- 鸿蒙系统王维,王维这句诗有多美?先被欧阳修“偷”了,后被苏轼“偷”了
- 基于openssl的3DES(ECB)加密算法
- SSL单向、双向认证
- wpa_supplicant wpa_cli 无线网络配置
- 队列和堆栈 --- 先进先出和先进后出
热门文章
- 利用元数据管理数据质量
- 暴力/图论 hihoCoder 1179 永恒游戏
- js获取单选框里面的值
- GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
- 五个提升人生智慧的经典故事
- SpringBoot如何直接访问HTML页面
- CSDN2019博客之星评选——期待各位大佬的投票!
- 记录一次java.lang.ClassCastException的java类型转换异常解决方案-附最终解决方案
- Spring Cloud Eureka 属性配置中文说明文档
- linux添加硬盘永久挂载,linux新增硬盘如何挂载