有关maven的一些知识点
一.java的文件:
.java文件:这是java源代码文件,包含java语言编写的类,接口,枚举等定义,每个文件包含一个公共类,文件名必须和公共类名一致,是开发者直接编写的文件。
.class文件:由javac也就是java编译器将.java文件编译生成的字节码文件,包含着java虚拟机也就是jvm可以理解的指令集,这个字节码文件是跨平台的关键。
.jar文件:java的归档文件,是一种java语言中压缩文件的格式,用于打包多个.class文件。
二.java中的jar包的使用方法:
问题1:怎么使用idea打包项目为jar包?
答案:在idea界面点击文件,项目结构,找到工件,点击加号,点击jar,点击从具有依赖性的模块...,在这里从模块创建jar,选择模块以及模块中是否有主类,点击确定,应用并确定,然后找到构建,点击构建工件,可以看到已经打包好的jar包,然后点击构建,等待右下角的进度条结束就可以了,打包好的jar一般会放到点击工件那一步的输出目录上。
问题2:将项目打包好jar包后怎么在新的项目中引用并使用该jar包呢?
答案:首先在新项目中创建一个文件夹,叫做lib,将打包好的jar包复制过来,复制到lib文件夹下,此时还没有将jar包引入进来,右键jar包,点击add as lib...,将这个jar包添加到当前的项目中,点击ok,稍微等一会,此时上面导入的jar包就会有目录了,并且目录中都是一些.class文件,此时还是不能使用是因为jar包引入进来后没有进行导包,导包之后就可以正常在新项目中使用这个jar包中的各种类了。
问题3:如果不想用这个jar包之后怎么将这个jar包从当前的项目中删除出去呢?
答案:点击文件,点击项目结构,点击模块,此时在界面右侧会有两个东西,一个是jdk,一个是我们导入的jar包,点击想要删除的jar包,点击减号,将该jar包从当前项目模块当中删除出去,点击应用并确定,此时lib文件夹下的jar包下就不存在任何目录了,并且新项目中导入过的部分也不能正常使用了。
问题4:八股文是什么?
答案:
数据结构与算法。基础的数据结构,数组,链表,队列,哈系树等。经典的算法思想,二分,动态规划,贪心算法。
计算机组成原理。冯诺依曼体系结构,计算机五大组成部分,cpu缓存机制,内存层次结构。
操作系统。系统资源管理以及进程调度等核心功能。进程线程管理,页面置换算法,进程间通信,死锁,文件系统。
计算机网络。OSI七层模型,TCP/IP四层模型,TCP/UDP协议,三次握手四次挥手。
数据库。关系型数据库和非关系型数据库的核心特性。事务的ACID特性,mysql,redis。
编程语言。java为例,JVM内存模型,垃圾回收机制。
软件工程。软件开发流程以及方法论。软件开发的生命周期,敏捷开发,需求分析,软件测试。
网络安全。常见的攻击手段,加密算法,怎么防范sql注入攻击。
三.maven的学习:
在学习jar包的时候就有在想为什么不能使用maven进行快捷打包,接下来学习maven。
maven3.8.8,jdk17,idea2022。
项目管理工具maven:
依赖管理:
maven是一个依赖管理工具和构建工具,有了maven,可以通过maven的远程仓库下载jar包到maven的本地仓库,通过maven的本地仓库导入jar包。这是依赖管理。自动下载所需依赖并保证版本没有冲突,只需要编写配置就可以。maven是一个依赖管理工具,使用maven之后,通过配置依赖(jar包)的坐标,查找本地仓库中相应的jar包,如果本地仓库没有,统一从镜像网站或者中央仓库去下载,这样大大节省了磁盘空间。
项目构建:
项目构建是指将源代码,配置文件,资源文件等转化为能够运行或者部署的应用程序或者库的过程。java工程构建出来的jar包,web工程构建出来的war包,web工程最终部署到tomcat上的就是构建之后生成的war包,而不是工程本身。
四.maven的工作原理模型图:
pom项目对象模型,dom文档对象模型。
maven工程的gavp:groupid【组织id】,artifactid【模块id】,version【版本号】,packaging【打包方式】。前三个是必要的,最后一个为可选项。
packaging的定义规则:
属性为jar,表示打包为jar包的文件。
属性为war,表示打包为war包的文件。
属性为pom,表示不会打包,而是用来继承的父工程。
其中的scope【依赖范围】指定的是依赖的范围。
五.java项目和web项目的区别:
java工程项目和web工程项目的区别就是相应的项目下有无web模块。web工程项目下存在web模块,如果想将java项目改变为web项目,有两种方式,第一种就是在java项目下添加一个web模块,第二种就是在配置文件当中修改打包方式为war包,然后重新加载项目,此时该项目就是一个web项目,打开项目结构可以看到该项目下存在web模块。
web工程最重要的配置文件就是web.xml文件。
web的配置文件和web的资源配置文件的路径地址,通常是项目名下的src下的main下的webapp,这个是web的资源配置文件的存放路径,在项目下的src下的main下的webapp下的WEB-INF下的位置放web.xml文件。
六.命令方式项目构建:
清理,编译,测试,报告,打包,部署。
mvn compile 编译项目,生成target文件。
mvn package 打包项目,生成jar包或者war包。
mvn clean 清理编译或者打包之后的项目结构。
mvn install 打包后上传到maven本地仓库。
mvn deploy 只打包,上传到maven私服仓库。
mvn site 生成站点。
mvn test 执行测试源码。
七.maven工程中的打包和安装有什么区别:
打包是将工程打成jar包或者war包,保存在target目录下。
安装是将当前工程所生成的jar包或者war包,安装到本地仓库,会按照坐标保存到指定位置。
八.如何通过配置文件中的maven的坐标来查找到jar包:
配置文件中的maven中的坐标在磁盘中其实就是一层层的目录,所以在本地仓库中去找groupid,这里就是一层目录,然后根据这个目录结构去查找artifactid,在这个artifactid下我们可以看到版本号,在版本号的目录下我们就能找到相应打包好的jar包了。
九.什么是构建的生命周期:
构建的生命周期可以理解为是一组固定构建命令的有序集合,触发构建的周期命令之后,会自动触发周期之前的所有命令。
十.插件,命令,周期三者的关系:
周期包含各种命令,命令中又包含各种插件。
使用周期命令构建,可以简化构建的过程。
最终进行构建的是插件。
十一.dependencies和properties:
dependencies指的是依赖管理,用于存放各种dependency,而properties用于存放当前maven工程的一些属性。比如当前项目工程使用的jdk的版本以及构建项目过程中使用的编码格式。
十二.依赖范围scope:
通过设置坐标的依赖范围scope,可以设置对应jar包的作用范围:编译环境,测试环境,运行环境。
compile编译的依赖范围,scope元素的缺省值。使用此依赖范围的maven依赖,在编译,测试,运行的过程中都是必须的。
test测试的依赖范围,使用此依赖范围的Maven依赖,只针对于测试的路径是有效的。
provided已提供依赖范围,使用此依赖范围的maven依赖,只针对于编译和测试是有效的。
runtime运行时依赖范围,使用此依赖范围的maven依赖,只针对于测试和运行是有效的。
import导入依赖范围,该依赖范围只能和dependencyManagement元素配合使用,其功能是将目标pom.xml文件中的dependencyManagement配置导入到当前pom.xml中的dependencyManagement。
十三.maven下载失败的解决方案:
如果在坐标【通过gav】当中找到了.lastupdated的文件将其删掉就可以了,有这个文件说明该maven仓库中的这个依赖项被污染了。
十四.maven工程中的build构建配置之自定义打包名称:
1.指定构建打包文件的名称,非默认名称。
默认为artifactid+version.打包方式
<build>
<fileName>自定义打包的名称</fileName>
</build>
2.指定打包的文件,打包哪些文件和排除哪些文件
<build>里面的<resources>下的<resource>里面有两个标签,一个是<directory>设置资源所在的目录,一个是<includes>下的<include>设置包含的资源类型。可以是**/*.xml。
3.配置依赖插件
dependency标签下引入开发所需要的jar包,我们可以在build/plugins/plugin标签引入插件。
常用的插件:修改jdk版本,tomcat插件,mybatis分页插件,mybatis逆向工程插件等等。
十五.maven的依赖传递和依赖冲突:
1.maven的依赖传递特性:
什么是依赖传递?
A依赖B的,B依赖C,此时可以说A依赖C。
依赖传递的原则:
在A依赖B,B依赖C的时候,C能否传递到A,取决于B依赖于C时的使用范围以及配置。
B依赖C的时候使用compile范围,可以传递。
B依赖C的时候使用test或者provided范围,不能传递。
B依赖C的时候,配置了optional标签,不能传递。
依赖传递的终止:
1.非compile范围进行依赖传递
2.使用optional配置进行终止传递
3.依赖冲突(传递的依赖已经存在)
2.依赖冲突:
当直接或者间接的引用出现了相同的jar包,这就是冲突,依赖冲突避免出现重复依赖,并且会终止依赖的传递。
使用exclusions标签进行依赖的排除,不需要加version版本号
十六.maven工程的继承关系:
maven的继承机制是一个项目中从另一个项目中继承配置信息的机制,可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护。
继承作用:
在父工程中统一管理依赖信息,对一个比较大的项目进行拆分,一个project下面有多个module,每个module下面都需要自己的依赖配置信息。
继承语法:
首先父工程的组织id,模块id,版本号都需要写,然后将父工程的打包方式设置为pom。
子工程使用parent标签将父工程的坐标设置进来,不需要设置打包方式,如果子坐标中的组织id和版本号和父工程中的一致,那么可以省略。
十七.依赖管理dependencyManagement:
<dependencyManagement>用于集中管理依赖的版本,范围和其他配置。
<dependencies>包含一组依赖项,这些依赖项的版本将由父项目统一管理。
<dependency>定义了一个具体的依赖项。
<groupid>组织id
<artifactid>项目id
<version>版本号
十八.maven工程聚合关系:
maven聚合是指将多个项目组织到一个父级项目中,以便一起构建和管理的机制。
聚合作用:
管理多个子项目,构建和发布一组相关的项目,优化构建顺序,统一管理依赖项。
聚合语法:
这里的module中写的不是模块名,而是子工程的路径。
十九.maven私服:
maven私服是一种特殊的远程仓库,架设在局域网内的仓库服务,用于代理用于外部的远程仓库。
比如Nexus。