Java最新java程序员进阶之路:maven项目构建神器(1),java开发岗银行面试题

最后,附一张自己面试前准备的脑图:

image

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

image

  • Spring全家桶(实战系列)

image.png

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

image

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

第二步,解压下载的安装包,复制该路径:

java程序员进阶之路:maven项目构建神器来了

  • bin 目录:该包含了 Maven 运行的所有脚本,用来配置 Java 命令,准备执行环境,然后执行 Java 命令。

  • boot 目录:该目录只包含了一个 plexus-classworlds-xxx-jar 文件,该文件是一个类加载器框架,相当于默认的 Java 类加载器,提供了更加丰富的语法以便配置,Maven 使用该加载器加载自己的类库。

  • conf 目录:该目录包含了一个非常重要的文件 settings.xml。可以直接修改该文件,用来全局定制 Maven 的行为;也可以复制该文件到 ~/.m2/ 目录下(~表示用户目录),修改该文件可以在用户范围内定制 Maven 的行为。

  • lib 目录:该目录包含了Maven运行时所需要的 Java 类库,包括Maven 依赖的第三方类库,比如 slf4j-api.jar。

java程序员进阶之路:maven项目构建神器来了

第三步,配置环境变量

打开终端,输入 vim ~/.bash_profile 命令打开 bash_profile 文件:

java程序员进阶之路:maven项目构建神器来了

bash_profile 文件用于配置环境变量和启动程序,详细介绍可参照:

www.cnblogs.com/kevingrace/…

在文件中添加设置环境变量的命令:

export M2_HOME=/Users/maweiqing/cmower/save/apache-maven-3.8.3

export PATH= P A T H : {PATH}: PATH:{M2_HOME}/bin

复制代码

java程序员进阶之路:maven项目构建神器来了

保存后退出,可以执行 source ~/.bash_profile 使配置生效:

java程序员进阶之路:maven项目构建神器来了

第四步,查看配置是否生效

输入 mvn -v 命令,如果输出以下内容,表示配置成功:

java程序员进阶之路:maven项目构建神器来了

如未生效,可再开一个终端窗口尝试 mvn -v 命令。

2)brew 一键安装

第一步,使用 brew install maven 命令一键安装,并自动配置环境变量

第二步,使用 mvn -v 命令查看版本

二、Maven 配置文件大盘点

===============

Maven 是基于 POM(Project Object Model) 进行的,项目的所有配置都会放在 pom.xml 文件中,包括项目的类型、名字,依赖关系,插件定制等等。

<?xml version="1.0" encoding="UTF-8"?>

<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”>

4.0.0

com.itwanger

MavenDemo

0.0.1-SNAPSHOT

MavenDemo

复制代码

  • 第一行是XML头,指定了该xml文档的版本和编码方式。

  • project 是根元素,声明了一些POM相关的命名空间及xsd元素。

  • modelVersion指定了当前POM的版本,对于Maven 3来说,值只能是4.0.0。

  • groupId定义了项目属于哪个组织,通常是组织域名的倒序,比如说我的域名是 itwanger.com,所以groupId就是 com.itwanger。

  • artifactId定义了项目在组织中的唯一ID。

  • version指定了项目当前的版本,SNAPSHOT意为快照,说明该项目还处于开发中。

  • name 声明了一个对于用户更为友好的项目名称。

groupId、artifactId和version这三个元素定义了一个项目的基本坐标,在Maven的世界里,任何的jar和pom都是以基于这些坐标进行区分的。

实际项目

模块

版本

依赖类型

依赖范围

依赖是否可选

<!—主要用于排除传递性依赖–>

复制代码

  • dependencies 可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。

  • grounpId、artifactId和version 组成了依赖的基本坐标。

  • type 指定了依赖的类型,默认为 jar。

  • scope 指定了依赖的范围(详情见下面依赖范围部分)。

  • optional 标记了依赖是否是可选的(详情见下面依赖可选部分)。

  • exclusions 用来排除传递性依赖(详情见下面依赖排除部分)。

依赖范围有以下几种:

  • compile,默认的依赖范围,表示依赖需要参与当前项目的编译,后续的测试、运行周期也参与其中,是比较强的依赖。

  • test,表示依赖仅仅参与测试相关的工作,包括测试代码的编译和运行。比较典型的如 junit。

  • runntime,表示依赖无需参与到项目的编译,不过后期的测试和运行需要其参与其中。

  • provided,表示打包的时候可以不用包进去,别的容器会提供。和 compile 相当,但是在打包阶段做了排除的动作。

  • system,从参与程度上来说,和 provided 类似,但不通过 Maven 仓库解析,可能会造成构建的不可移植,要谨慎使用。

java程序员进阶之路:maven项目构建神器来了

关于传递性依赖

比如一个account-email项目为例,account-email有一个compile范围的spring-code依赖,spring-code有一个compile范围的commons-logging依赖,那么commons-logging就会成为account-email的compile的范围依赖,commons-logging是account-email的一个传递性依赖:

java程序员进阶之路:maven项目构建神器来了

有了传递性依赖机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。

关于依赖可选

java程序员进阶之路:maven项目构建神器来了

项目中A依赖B,B依赖于X和Y,如果所有这三个的范围都是compile的话,那么X和Y就是A的compile范围的传递性依赖,但是如果我想X、Y不作为A的传递性依赖,不给它用的话,可以按照下面的方式配置可选依赖:

4.0.0

com.itwanger

project-b

1.0.0

mysql

mysql-connector-java

5.1.10

true

postgresql

postgresql

8.4-701.jdbc3

true

复制代码

关于依赖排除

有时候你引入的依赖中包含你不想要的依赖包,你想引入自己想要的,这时候就要用到排除依赖了,比如下图中spring-boot-starter-web自带了logback这个日志包,我想引入log4j2的,所以我先排除掉logback的依赖包,再引入想要的包就行了。

org.springframework.boot

spring-boot-starter-web

2.5.6

org.springframework.boot

spring-boot-starter-logging

org.springframework.boot

spring-boot-starter-log4j2

2.5.6

复制代码

声明exclustion的时候只需要groupId和artifactId,不需要version元素,因为groupId和artifactId就能唯一定位某个依赖。

三、Maven 仓库

==========

在 Maven 的术语中,仓库是一个位置(place),项目中依赖的第三方库以及插件(可统称为构件),都放在这里。所有的 Maven 项目都可以共享这个仓库,只需要根据依赖的坐标,就可以在需要的时候找到仓库中的依赖,并使用它们。

举个例子,项目中使用了分页插件的依赖:

com.github.pagehelper

pagehelper-spring-boot-starter

1.1.0

复制代码

那么它对应的仓库路径是这样的:

java程序员进阶之路:maven项目构建神器来了

仓库可以以下几种:

java程序员进阶之路:maven项目构建神器来了

1)本地仓库

当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。

默认情况下,不管是Window还是macOS,或者是 Linux,每个用户都会在自己的用户目录下有一个路径名为 .m2/repository/ 的仓库目录。

如果你想自定义本地仓库目录地址,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为你想要的仓库地址,例如:

/path/to/local/repo

复制代码

如果找不到 ~/.m2/settings.xml 的话,可以到 Maven 的安装目录(前文提到的 conf 目录)下去拷贝。

2)远程仓库

默认情况下,本地仓库是被注释掉的,也就是空的,那么就必须得给 Maven 配置一个可用的远程仓库,否则 Maven 在 build(构建)的时候就无法去下载依赖。

中央仓库就是这样一个可用的远程仓库,里面包含了这个世界上绝大多数流行的开源 Java 类库,以及源码、作者信息、许可证信息等等。

不过,默认的中央仓库访问速度比较慢,通常我们会选择使用阿里的 Maven 远程仓库。

ali-maven

http://maven.aliyun.com/nexus/content/groups/public

true

true

always

fail

复制代码

  • repositories 可以包含一个或者多个repository元素,以声明一个或者多个仓库。

  • id,仓库声明的唯一id,需要注意的是,Maven自带的中央仓库使用的id为central,如果其他仓库也使用了该id,就会覆盖中央仓库的配置。

  • url,指向了仓库的地址。

  • releases和snapshots,用来控制Maven对于发布版构件和快照版构件的下载权限。

  • enabled子元素为 true 时表示可以从仓库下载发布版构件和快照版构件。

  • updatePolicy 子元素用来配置Maven从远处仓库检查更新的频率。

  • 默认值是daily,表示每天检查一次;

  • 可选值 never 表示从不检查;

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

s,用来控制Maven对于发布版构件和快照版构件的下载权限。

  • enabled子元素为 true 时表示可以从仓库下载发布版构件和快照版构件。

  • updatePolicy 子元素用来配置Maven从远处仓库检查更新的频率。

  • 默认值是daily,表示每天检查一次;

  • 可选值 never 表示从不检查;

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值