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;您可能将遇到不同的应用程序、布线和连接等问题。了解数据中心的功能区域以及每个区域中可能需要测试的内容有助于为数据中心测试做好准备工作&#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…

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

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

访问数据库_Lua 数据库访问

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

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;后面再介绍动态视频以…

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

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

利用photoshop制作gif图片

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

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

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

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

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

Java策略模式demo(打折策略例子)

策略模式&#xff1a;它定义了算法家族&#xff0c;分别封装起来&#xff0c;让它们之间可以相互替换。此模式让算法的改变&#xff0c;不会影响到使用算法的客户端。 它对一系列的算法进行封装&#xff0c;为所有的算法定义一个抽象的接口&#xff0c;并通过继承该抽象算法接…

java 多态判断非空_收藏Java 面试题全梳理

脚本之家你与百万开发者在一起来源 | Java建设者(ID&#xff1a;javajianshe)作者 |cxuan如若转载请联系原公众号Java 基础篇Java 有哪些特点并发性的&#xff1a;你可以在其中执行许多语句&#xff0c;而不必一次执行它面向对象的&#xff1a;基于类和面向对象的编程语言。独立…

福禄克官方经销商给您科普光纤极性基础

极性定义了流动的方向&#xff0c;例如磁场或电流的方向。在光纤中&#xff0c;极性是定向的&#xff1b;光信号通过光缆从一端传输到另一端。光缆一端的光纤链路传输信号&#xff08;Tx&#xff09;必须与另一端的相应接收器&#xff08;Rx&#xff09;匹配。那么&#xff0c;…

django Form组件

django Form组件 Django的Form主要具有一下几大功能&#xff1a; 生成HTML标签验证用户数据&#xff08;显示错误信息&#xff09;HTML Form提交保留上次提交数据初始化页面显示内容小试牛刀 1、创建Form类 from django.forms import Form from django.forms import widgets #…

RUP大讲堂(第三讲):如何建立软件产品的愿景

我撰写的一些关于RUP的讲义&#xff0c;PDF格式&#xff0c;可在文后点击“附件下载”阅读全文。本篇内容简介及部分截图&#xff1a;◇ 为什么需要愿景◇ 业务愿景◇ 系统愿景◇ 导出愿景的技巧◇ 小结

光纤测试时不得不用的福禄克CFP光纤测试仪

不同的光纤应用具有不同的最大插入损耗要求&#xff0c;以确保损耗不会过高&#xff0c;从而防止信号正确到达远端。因此&#xff0c;第一项任务涉及确定系统上线时客户计划运行的光纤应用程序&#xff0c;以及他们将来计划运行的光纤应用程序。 假设您的客户正在设计一个数据…

java怎么表示正无穷大_有什么比无穷大更大,比无穷小更小?

你好&#xff0c;欢迎来到我的《数学通识50讲》。我们讲无穷大是比任何数都大&#xff0c;那么世界上只有一个无穷大吗&#xff1f;如果有多个&#xff0c;能比较大小吗&#xff1f;类似的&#xff0c;无穷小就是无限接近于零&#xff0c;那么世界上会有不同的无穷小么&#xf…