java基础巩固10

Maven介绍

(1)Maven就是专门为Java项目打造的管理和构建工具,它的主要功能有:
提供了一套标准化项目结构;
提供了一套标准化的构建流程(编译,测试,打包,发布);
提供了一套依赖管理机制
(2)一个使用Maven管理的Java项目,它的目录结构默认如下:

在这里插入图片描述


项目的根目录是a-maven-project是项目名,它有一个项目描述文件pom.xml,存放Java源码的目录时src/main/java,存放资源文件的目录是src/main/resource,存放测试源码的目录src/test/java,存放测试资源的目录是src/test/resource,最后,所有编译打包生成的文件都放在target目录里面,这些就是一个Maven项目的标准目录结构。所有的目录结构都是约定好的标准结构,我们千万不要随意修改目录结构。使用标准结构不需要做任何配置,Maven就可以正常使用。
(3)使用/声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中。
(4)pom.xml:
其中,groupId类似于java的包名,通常是公司或者组织名称。artifactId类似于java的类名,通常是项目名称,再加上version,一个Maven工程就是由groupId,artifactId和version作为唯一标识。

依赖管理

(1)Maven解决了依赖管理问题,我们声明了自己的项目需要abc,Maven会自动导入abc的jar包,再判断出abc需要xyz,又会自动导入xyz的jar包,这样,最终我们的项目会依赖abc和xyz两个jar包。
(2)maven定义了几种依赖关系,分别是compile、test、runtime和provided;
compile:编译时需要用到该jar包(默认)
test:编译Test时需要用到该jar包
runtime:编译时不需要,但运行时需要
provieded 编译是需要用到,但运行时由jdk或某个服务器提供
其中,默认的compile是最常用的,Maven会把这种类型的依赖直接放入classpath。
test依赖表示仅在测试时使用,正常运行时并不需要,最常用的test依赖就是JUnit。
runtime依赖表示编译时不需要,但运行时需要,最典型的runtime依赖是JDBC驱动,例如MySQL驱动;
provided依赖表示编译时需要,但运行时不需要。最典型的provided依赖是Servlet API,编译的时候需要,但是运行时,Servlet服务器内置了相关的jar所以运行期不需要。
(3)最后一个问题是,Maven如何知道从何处下载所需要的依赖,答案是Maven维护了一个中央仓库,所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地。Maven并不会每次都从中央仓库下载jar包,一个jar包一旦被下载过,就会被Maven自动缓存在本地仓库中,所以,除了第一次编译时因为下载需要比较慢,后悔过程因为本地缓存,并不会重复下载同样的jar包。
(4)Maven通过对jar包进行PGP签名确保任何一个jar包一旦经过发布就无法修改。修改已发布jar包的唯一方法是发布一个新版本。只有以-SNAPSHOT结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT。

构建流程

(1)Maven不但有标准化的项目结构,而且还有一套标准化的构建流程,可以自动化实现编译,打包,发布等。
(2)Lifecycle和Phase
使用maven时,我们首先要了解什么是maven的声明周期(lifecycle)。Maven的生命周期由一系列阶段(phase)构成,以内置的生命周期default为例,它包含以下阶段:

在这里插入图片描述

如果我们运行mvn package, Maven就会执行default生命周期,它会从开始一直运行到package这个phase为止;
如果我们运行mvn compile,Maven就会执行default声明周期,但这次它只会运行到compile。
Maven另一个常用的声明周期是clean,它会执行三个phase:
pre-clean;clean;pose-clean
所以,我们使用mvn这个命令时,后面的参数是phase,Maven自动根据生命周期运行到指定的phase。
(3)Goal
执行一个phase又会触发一个或者多个goal:

在这里插入图片描述


goal的命名总是abc:xyz这种形式。作为类比:
lifecycle相当于Java的package,它包含一个或者多个phase;
phase相当于java的class,它包含一个或者多个goal
goal相当于class的method,它其实才是真正干活的。
大多数情况下,我们只要指定phase,就默认执行这些phase默认绑定的goal,只有少数情况下,我们可以直接指定运行一个goal,例如,启动Tomcat服务器:
mvn tomcat:run

使用插件

(1)使用Maven构建项目就是执行lifecycle,执行到指定的阶段为止,每个阶段会执行自己默认的一个或者多个goal,goal是最小任务单元。实际上,执行每个phase,都是通过某个插件(plugin)来执行的,Maven本身其实并不知道如何执行compile,它只是负责找到对应的compiler插件,然后执行默认的compiler:compile这个goal来完成编译。所以,使用Maven,实际上就是配置好需要使用的插件,然后通过phase调用他们。
(2)如果标准插件无法满足需求,我们还可以使用自定义插件。

模块管理

(1)Maven可以有效地管理多个模块,我么你只需要把每个模块当做一个独立的Maven项目,它们有各自的pom.xml

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340