作者 | 小明菜市场来源 | 小明菜市场(ID:fileGeek)头图 | CSDN 下载自东方IC
前言
为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven为什么要使用maven
在开发中经常需要依赖第三方包,包与包之间存在依赖关系,版本之间存在兼容问题,还有需要把包进行升级和降级,当项目复杂到了一定程度的时候,需要对包进行管理。maven是当前最受欢迎的自动化综合工具,类似的还有ant,npm,nuget,composer。
maven提供了开发人员构建一个完整生命周期的框架,开发团队可以自动化的完成项目的基础工具建设,maven使用标准目录结构和默认构建生命周期, 因此maven是一个项目管理工具。主要做了以下几件事情
统一开发规范与工具。
统一管理jar包
maven生命周期
maven把项目构建划分为不同的生命周期,它这个过程包括编译,测试,打包,集成测试,验证,部署,maven的所有执行动作都需要指明自己在这个过程的执行位置,然后在maven执行的时候,依照过程的发展依次调用包进行处理。这个是maven的一个基本的调度机制,1、maven的标准工程结构
|-- pom.xml(maven的核心配置文件)|-- src|-- main |-- java(java源代码目录) |-- resources(资源文件目录)|-- test |-- java(单元测试代码目录)|-- target(输出目录,所有的输出物都存放在这个目录下) |-- classes(编译后的class文件存放处)
2、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版本规范一般定义为、、-
处理逻辑的版本号为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 文件中引入对应的标签即可。 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.zp.maven MavenDemo 0.0.1-SNAPSHOT jar MavenDemo http://maven.apache.org UTF-8 3.8.1 junit junit ${junit.version} test log4j log4j 1.2.12 compile
标签具有四个属性。 - 项目组织唯一的标识符,实际对应 JAVA 的包的结构。 - 项目唯一的标识符,实际对应项目的名称,就是项目根目录的名称。 - jar 包的版本号。可以直接填版本数字,也可以在 properties 标签中设置属性值。 - jar 包的作用范围。可以填写 compile、runtime、test、system 和 provided。用来在编译、测试等场景下选择对应的 classpath。
如何寻找 jar 包在 mvnrepository.com 站点搜寻你想要的 jar 包版本
使用 maven 插件
要添加 Maven 插件,可以在 pom.xml 文件中添加标签。 org.apache.maven.plugins maven-compiler-plugin 3.3 1.7 1.7
一次编译多个工程
需要创建一个父 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 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"> 4.0.0 com.mycompany.app app 1.0-SNAPSHOT pom my-app my-webapp
选择编译 某某 时,会依次对它所有的 module 执行相同的操作。如何打包一个可以直接运行的Spring Boot jar 包
可以使用 Spring-boot-maven-plugin 插件 org.springframework.boot spring-boot-maven-plugin repackage
如果引入了第三方jar包,如何打包 首先,添加依赖 io.github.dunwu dunwu-common 1.0.0 system ${project.basedir}/src/main/resources/lib/dunwu-common-1.0.0.jar
然后配置插件 org.springframework.boot spring-boot-maven-plugin repackage true
最佳实践
通过 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.0modelVersion><groupId>org.springframework.bootgroupId><artifactId>spring-boot-dependenciesartifactId><version>2.1.4.RELEASEversion><packaging>pompackaging><dependencyManagement> <dependencies> dependencies>dependencyManagement><build><pluginManagement> <plugins> plugins>pluginManagement>build>project>
其他项目中,通过引入来管理依赖 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-dependenciesartifactId> <version>${spring-boot.version}version> <type>pomtype> <scope>importscope> dependency> dependencies>dependencyManagement>
更多精彩推荐
☞阿里马涛:重新定义云时代的开源操作系统 | 人物志
☞代码攻击破坏设备,炸毁 27 吨发电机的背后
☞算力至上?AI芯片大对决
☞牛!发出中国第一封电子邮件,注册登记域名 CN,中国互联网之父传奇
☞长沙 · 中国1024程序员节盛况空前,500 万程序员线上线下引爆星城
☞“国产操作系统最大难题在于解决「生产关系」” | 人物志
☞一口气看完45个寄存器,CPU核心技术大揭秘
点分享点点赞点在看