maven添加子工程_重量级!Maven史上最全教程,看了必懂

6ab59bbe90c64f0d796bbf1c347a0b85.gif

de187786db3f312083f831cbeb57853f.png

作者 | 小明菜市场来源 | 小明菜市场(ID:fileGeek)头图 |  CSDN 下载自东方IC

971421960a822fd967cd1f546471ef4b.png

前言

为了持续集成和持续部署,需要把项目改造为,或者使用maven创建项目,下面介绍maven

7f1333416d603ea00c69025f71807782.png

为什么要使用maven

在开发中经常需要依赖第三方包,包与包之间存在依赖关系,版本之间存在兼容问题,还有需要把包进行升级和降级,当项目复杂到了一定程度的时候,需要对包进行管理。

1a972bc1ddec44e5e539f6e4fe0d2ae3.png

maven是当前最受欢迎的自动化综合工具,类似的还有ant,npm,nuget,composer。

b7495c07de09a3ff07702acda0dce68c.png

maven提供了开发人员构建一个完整生命周期的框架,开发团队可以自动化的完成项目的基础工具建设,maven使用标准目录结构和默认构建生命周期, 因此maven是一个项目管理工具。主要做了以下几件事情

  1. 统一开发规范与工具。

  2. 统一管理jar包

36121c597ba744db486116a4a091e0bc.png

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来说,采用约定优于配置,可以减少工作量,降低学习成本。

c2344b81b1535c156e6682595acce96c.png

Maven版本规范

groupId - 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着 JAVA 的包的结构。例如 org.apache artifactId - 单独项目的唯一标识符。比如我们的 tomcat, commons 等。不要在 artifactId 中包含点号(.)。version - 一个项目的特定版本。packaging - 项目的类型,默认是 jar,描述了项目打包后的输出。类型为 jar 的项目产生一个 JAR 文件,类型为 war 的项目产生一个 web 应用。maven版本规范一般定义为
、、-
处理逻辑的版本号为
SNAPSHOT - 这个版本一般用于开发过程中,表示不稳定的版本。LATEST - 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个 snapshot 版,具体看哪个时间最后。RELEASE - 指最后一个发布版。

c948608b95fed156c721cebb715233c7.png

安装

配置环境变量

(1)解压压缩包(以 apache-maven-3.3.9-bin.zip 为例)(2)添加环境变量 MAVEN_HOME,值为 apache-maven-3.3.9 的安装路径

afd2ad8b2953f3e8b91a58bc4458be97.png

(3)在 Path 环境变量的变量值末尾添加%MAVEN_HOME%bin

(4)在 cmd 输入 mvn –version,如果出现 maven 的版本信息,说明配置成功。

2a46c572365ae51db03c12ad13b29d3e.png

本地仓储配置

从中央仓库下载的jar包都会统一的保存在本地仓库中,我们需要配置本地仓库的位置。在conf目录下的setting.xml文件。298fd17aeef0050358267d7c230a6b05.png

7321c587beaaa30b6607e5d130fa4df5.png

第一个maven工程

在 Intellij 中创建 Maven 工程

(1)创建 Maven 工程依次点击 File -> New -> Project 打开创建工程对话框,选择 Maven 工程。

a0f9fd7086ad1cd0cae3b5ec40447452.png

(2)输入项目信息

10c33dc5811ad4b1abb14418d5bddffe.png

(3)点击 Intellij 侧边栏中的 Maven 工具界面,有几个可以直接使用的 maven 命令,可以帮助你进行构建。

113f22a3e0f2ea7e49e5753bc6671cd3.png

Maven 命令构建方式

进入工程目录,输入maven命令

1a609436ab051d9e8f50221419deb15b.png

b1e5ac276cd71ff88ab859888af12f4d.png

使用指导

添加外部依赖 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 执行相同的操作。

dc76f676e17b9c49b09ca156fe552c44.png

如何打包一个可以直接运行的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            

f848e73045795555a4f3960788fcb882.png

最佳实践

通过 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>
908b5497e970b39f75f8af8772d752b9.png

9753f8710ae67568d50747fdf07dce05.png

更多精彩推荐

☞阿里马涛:重新定义云时代的开源操作系统 | 人物志

☞代码攻击破坏设备,炸毁 27 吨发电机的背后

☞算力至上?AI芯片大对决

☞牛!发出中国第一封电子邮件,注册登记域名 CN,中国互联网之父传奇

☞长沙 · 中国1024程序员节盛况空前,500 万程序员线上线下引爆星城

☞“国产操作系统最大难题在于解决「生产关系」” | 人物志

☞一口气看完45个寄存器,CPU核心技术大揭秘

点分享点点赞点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

短信发送的流程,硬编码在了服务方法里面,优化方案

短信发送的流程&#xff0c;直接硬编码在服务方法里面。怎样优化&#xff1f; 须要建立一个系统的短信发送表。定义短信发送模板&#xff1b; 通过批处理&#xff0c;比方spring batchquartz&#xff0c;去扫描这个表。来统一进行短信发送处理。 而不是各自service&#xff0c;…

通过福禄克测试仪进行数据中心机房各个区域的测试或认证

根据您要测试数据中心区域的不同&#xff0c;您可能将遇到不同的应用程序、布线和连接等问题。了解数据中心的功能区域以及每个区域中可能需要测试的内容有助于为数据中心测试做好准备工作&#xff0c;那么当问题来到你身边时&#xff0c;处理就变得很简单。 机房设备摆放有什…

java深拷贝和浅拷贝介绍

浅拷贝概念 深拷贝概念 Data Slf4j public class Sheep implements Cloneable {private String name;private int age;private String color;private Sheep friend;public Sheep(String name, int age, String color) {this.name name;this.age age;this.color color;}Overr…

给学Java的大学生们分享一些经验

想来学习Java也有两个年头了&#xff0c;永远不敢说多么精通&#xff0c;但也想谈谈自己的感受&#xff0c;写给软件学院的同仁们&#xff0c;帮助大家在技术的道路上少一点弯路。说得伟大一点是希望大家为软件学院争气&#xff0c;其实最主要的还是大家自身的进步提升—— 1&a…

利用福禄克DSX系列测试仪部署MPTL模块化插头端接链路

在与客户合作时&#xff0c;认识到MPTL&#xff08;模块化插头端接链路&#xff09;比使用传统插座、面板和设备跳线更适合连接设备的地方非常重要。如果您要部署这种&#xff0c;福禄克网络指定经销商—明辰智航的工程师会在测试时介绍给您。 如果您与零售场所、教育场所和酒…

访问数据库_Lua 数据库访问

Lua 数据库访问本文主要为大家介绍 Lua 数据库的操作库&#xff1a;LuaSQL。他是开源的&#xff0c;支持的数据库有&#xff1a;ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。本文为大家介绍MySQL的数据库连接。LuaSQL 可以使用 LuaRocks 来安装可以根据需要安装你需要的数…

OkHttp 3.x 源码解析之Interceptor 拦截器

拦截器 Java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码&#xff0c;也可以在一个action执行前阻止其执行&#xff0c;同时也提供了一种可以提取action中可重用部分的方式。 在AOP&#xff08;Aspect-Orient…

cwntos新建目录挂载磁盘_详解Linux磁盘挂载、分区、扩容操作的实现方法

概述今天主要分享下关于Linux磁盘挂载、分区、扩容操作的实现方法&#xff0c;先介绍下基本概念1、磁盘在Linux系统中所有的设备都会以文件的形式存储。设备一般保存在/dev目录下面&#xff0c;以sda、sda1、sda2 …,sdb、sdb1…,hda,hdb。现在的设备一般都是sd命名&#xff0c…

【翻译】WF从入门到精通(第六章):加载和卸载实例

上一篇&#xff1a;【翻译】WF从入门到精通&#xff08;第五章&#xff09;&#xff1a;workflow跟踪学习完本章&#xff0c;你将掌握&#xff1a; 1.理解工作流实例为什么要卸载和重新加载及其时机 2.理解工作流实例为什么要持久化及其时机 3.搭建SQL Server 2005&am…

python人脸照片分类_Python OpenCV 人脸识别(一)

前面介绍了Numpy模块&#xff0c;下面再介绍一个OpenCV模块&#xff0c;就基于这两个库看一下当下很火的人工智能是如何实现的&#xff0c;我们介绍几个&#xff1a;人脸识别(当下非常火的)、音视频操作等等。今天先介绍一下静态图片的人脸识别&#xff0c;后面再介绍动态视频以…

JAVA视频教程

http://www.icoolxue.com/album/show/38 因为需要对接接口&#xff0c;所以需要学服务器的语言&#xff0c;java&#xff0c;新的旅程开始转载于:https://www.cnblogs.com/chuangyiyuan/p/7118551.html

万兆以太网测试仪应该具备什么功能

在以太网技术中&#xff0c;100BaseT是一个里程碑&#xff0c;确立了以太网技术在商业用途的统治地位。千兆以太网以及随后出现的万兆以太网标准是两个比较重要的标准&#xff0c;以太网技术通过这两个标准从商业用途的局域网技术延伸到校园网以及城域网的汇聚和骨干。 以太网…

网络技术术语英汉对照

1. ADSL (Asymmetric Digital Subscriber Line) 非对称数字环路 2. ANSI (American National Standard Institute) 美国国家标准协会 3. APIPA (Automatic Private IP Addressing) 自动私有IP寻址 4. AppleTalk 由Apple公司推出的一种多层协议,一种可路由协议组 5. ARP (Addres…

利用photoshop制作gif图片

首先准备你需要的几张素材图片 1.将素材图片根据发生的顺序放置在不同的图层 2.打开窗口下的时间轴 选择帧动画 3.创建第一张帧动画 选项卡右边这个按钮&#xff0c;点击这个选择新建帧 第一张图片显示其他的隐藏 就是图层那儿左边的眼睛 4.创建第二章帧 新建帧--点击第二个图层…

合同相似可逆等价矩阵的关系及性质_线性代数预习自学笔记-11:等价性与相似性...

上一篇&#xff1a;线性代数预习自学笔记-10&#xff1a;线性变换一、相似矩阵根据矩阵表示定理&#xff0c;我们知道任意向量空间上的任意线性变换都可以用一个相应的矩阵表示&#xff1b;但一个棘手的问题是&#xff0c;在应用这个定理时&#xff0c;我们不可避免地需要先知道…

光纤铜缆测试安装的基础知识你都了解了吗?

福禄克经销商—明辰智航走访了多名读者&#xff0c;发现他们都说自己精通测试系统设计、安装和测试&#xff0c;但是很多行业的新标准新要求却是很懵懂。所以&#xff0c;了解当前较新的性能参数&#xff0c;系统必须满足的各种标准和要求以支持新的应用&#xff0c;确保为客户…

我看windows mobile数据同步方案

距离上篇博客似乎又过了一段日子了&#xff0c;这段日子应该算是挣扎着过来的&#xff0c;从寻找同步错误的过程到使用新的解决方案&#xff0c;总共花了近3个星期&#xff0c;我想自己有必要总结下这次的经历。项目是使用C#VS2008开发的&#xff0c;客户端数据存储采用SQL SER…

php获取当前时间戳方法

简介 php获取时间是件很容易的事情,下面小编就过来简单的分享一下个人所学php的一些经验吧; 操作方法 1、获取当前时间方法date() 很简单&#xff0c;这就是获取时间的方法&#xff0c;格式为&#xff1a;date($format, $timestamp)&#xff0c;format为格式、timestamp为时间戳…

不禁网页的浏览器_网页游戏兴衰史:「农场」没有菜,「渣渣辉」不贪玩

本文经授权转载自 | 国家人文历史ID |gjrwls作者 |巴里安200X年某月某日凌晨2点50&#xff0c;小明悄悄打开房门&#xff0c;蹑手蹑脚地走进存放笔记本电脑的房间&#xff0c;将拔下电源的电脑抱紧在怀里&#xff0c;悄悄地回了房间。一进房&#xff0c;小明兴奋地打开电脑&…