参考博客:http://www.cnblogs.com/whgk/p/7112560.html https://blog.csdn.net/zjf280441589/article/details/53044308
Maven是一个实现自动化构建的工具。Maven是基于项目对象模型(POM project object model)。Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。
安装
-
下载压缩包,解压操作。要使用maven工具前提:jdk环境、maven工具所在路径尽量不要有中文和空格
- 配置maven的环境变量与jdk配置相似:变量名MAVEN_HOME 值是maven的安装路径,然后在path中添加值 %MABEN_HOME%\bin
使用
maven的功能是构建项目,管理jar包--jar包的存储位置包括三种:本地库(本地计算机),私服(局域网中的某台电脑),中央仓储/镜像仓储(maven官网维护的仓库)
如何配置本地库
在maven安装目录中找到conf文件夹,在里面找到settings.xml配置文件,找到localRepository标签,该标签就是配置本地库的,如果没有配置本地库,默认是C盘中用户文件夹下.m2的下的repository文件夹
私服这里不做配置
中央库/镜像库的配置
如果没有配置,就直接取maven的中央库中去找了,中央库地址:https://mvnrepository.com/
准备
maven工具是一个构建工具,要先有原材料(java代码),才能生成应用程序;先准备原材料
maven项目有路径格式的要求:顶级文件夹是项目文件夹,在项目文件夹中有src文件夹和pom文件;在src文件夹中又有main和test两个下级文件夹;在main和test文件夹中分别又有java和resource文件夹。
注:maven项目路径约定好,不能改变
项目实现:约定>配置>代码
java非测试类放到main文件夹下的java文件夹,所有的测试类放到test文件夹下的java文件夹;所有项目中最终发布时要用到的配置文件放到main文件夹的resource文件夹中;测试时用到的配置文件放到test文件夹的resource文件夹中
maven工具不能自己实现原材料,需要借助其他工具准备原材料;所以要用到eclipse和maven进行整合;idea和maven进行整合
eclipse和maven的工具整合
目前eclipse工具已经整合了maven插件不需要我们再手动配置,我们查看一下maven整合情况和版本
在eclipse中创建maven项目---java项目和web项目,我们以java项目为例子
group id设置项目分组---一般就是域名倒置
artifact id设置项目名
version设置版本号
packaging设置当前是java还是web项目,或者父项目
name和description都是描述
我们写的两个类,分别位于各自的文件夹下
我们写了一个单元测试,以前需要手动导包buildpath,但是现在我们可以在pom.xml中通过填写依赖让maven自动帮我们找到对应的包。
maven命令
maven常用命令:
mvn compile 编译,将Java 源程序编译成
class
字节码文件。
mvn test 测试,并生成测试报告
mvn clean 将以前编译得到的旧的
class
字节码文件删除
mvn package 打包,动态 web工程打 war包,Java工程打 jar 包。
mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
项目名右击--Run As--maven build是执行上一次的命令操作,maven build..可以配置要执行的命令,这一个就可以执行所有的命令
mvn compile命令
mvn clean命令 :清理字节码文件
mvn test命令:测试并生成报告
mvn package命令:打包,java工程打成jar包,动态web工程打成war包
mvn install命令:将生成的jar包放到仓库中以便别的项目调用
创建动态web项目
eclipse和maven整合之后,创建一个web项目;需要注意当创建完成时,是没有web项目的标志的即没有WEB-INF文件夹和web.xml文件;我们可以自己复制进去也可以借用eclipse生成。
第一种方式:
第二种方式:
我们在使用第二种方式的时候,会产生META-INF文件夹,更全面,同时,他默认产生的web文件夹名是WebContent,同时是放在根目录下的,为了保持一致,我们最好改一下路径以及文件夹的名称:src/mian/webapp。步骤是先把Dynamic Web Module签名的复选框取消,然后点击apply,然后再点击复选框选中,这时候会提示我们futher configuration available,我们点这个进行配置,同时生成web.xml文件
这也只是一次性修改,每次创建项目都会回到初始状态。
jdk可以修改默认值,可以在settings.xml文件中指定jdk版本号
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
项目构建的环节
-
清理环节:是指将以前生成的字节码文件删除,为新生成字节码文件做准备;清理环节对应一个命令:mvn clean
- 编译环节:是指由源文件生成字节码文件;编译环节对应的命令:mvn compile
- 测试环节:是指对test--java包中的代码(测试代码)进行运行;对应的命令:mvn test
- 打包环节:是指对项目文件进行打包,最后根据java项目还是web项目生成相应的压缩包;如果是java项目那么生成.jar包,如果是web项目生成.war包;对应的命令时:mvn package;生成的包的名称组成是:项目名+版本号
- 安装环节:是指将生成的包,上传到仓库里面的操作;可以上传到本地库的命令:mvn install
- 部署环节:是指项目部署到服务器,命令是:mvn site
当执行靠后的构建环节命令时,会从最开始的环节构建起。
当把压缩包上传到仓库的时候---本地库,看到了路径关系,这个路径关系是和当前项目的组名、项目名、版本号有关;这三项内容:组名、项目名、版本号共同组成一个坐标。由这个坐标可以唯一确定一个包
版本介绍
例如:2.0.2.RELEASE
2:主版本号,当功能模块有较大更新或者整体架构发生变化时,主版本号会更新
0:次版本号,次版本号表示只是局部的一些变动
2:修改版本号,一般是bug的修复或者是小的变动
RELEASE位置:希腊字母版本号,用来标注当前版本的软件处于哪个开发阶段
希腊字母版本号:
BASE:设计阶段,只有相应的设计没有具体的功能实现
ALPHA:软件的初级版本,存在较多的bug
BETA:表示相对ALPHA有了很大的进步,消除了严重的bug,还存在一些潜在的bug
RELEASE:表示该版本是最终版
maven中的特性
- 依赖---最终当前项目需要其他的项目所生成的jar包,这些jar包可以称为依赖
- 如何在maven项目中设置依赖:即当前项目需要哪些jar包;到pom.xml文件中实现配置
-
maven工具可以帮助管理jar包,维护依赖关系
-
依赖的传递性:当在当前项目中配置实现依赖的时候,换句话说就是当前的项目需要一个jar包,那么假如jar中的类里面的代码又需要另一个jar包,那么此时当前项目在配置第一个jar包时会把第二个jar包一起依赖过来,比如下图,我们知道了核心包,但是这个核心包需要log包,所以会一起把这个包也引入过来
-
依赖的作用范围
-
根据jar中的类可以在哪使用,是否被发布在哪个位置使用:是指当前的jar包中类等内容是否可以在main--java源文件中使用或者是test-java源文件中使用是否被发布:是指当前的jar包是否在部署被部署到服务器
-
如何设置作用范围:在坐标之后添加<scope>标签,可以设置三中作用范围:compile,test,provided
-
compile值表示当前的jar包中的类等内容可以在main-java的源文件中被使用,也可以在test-java源文件被使用,同时参与部署;
test值表示当前jar包中的类等内容可以在test-java的源文件中被使用,不能再main-java中被使用;不参与部署
provided值表示当前jar包中的类等内容可以在main-java源文件和test-java源文件中被使用,不参与部署
默认值compile
-
-
在eclipse和maven整合之后,通过eclipse实现代码的开发,而通过maven实现后续操作:清理、编译、测试、打包、安装、部署
一个web项目,需要先部署才能测试,那么可以在maven的pom.xml文件中添加插件,添加此插件之后,可以替代eclipse中的tomcat整合,实现通过此插件实现部署:
-
排除性
从当前项目中将指定的jar包排除,是指当由传递特性,在依赖一个包的时候会把另一个jar包同时依赖过来,假设不需要同时依赖这另一个包,那么采用排除性;
-
依赖就近原则
-
如果当前项目直接依赖和间接依赖,那么最终按照就近原则肯定是直接依赖。
-
就近是在pom.xml文件中按照先后顺序,哪个依赖在前,那么哪个依赖作为作为最终的
-
-
版本号的统一管理
在pom.xml文件中,依赖设置,在起初设置了一种版本,后来由于需求可能需要变动另一种版本;那么如果pom.xml文件中没有采用统一版本管理,就会出现一个版本号一个版本号的修改,不方便;所以统一版本管理操作标签名是我们自定义的
继承特性
在创建maven项目的时候,可以先创建父项目,再创建子项目,使子项目继承父项目;目的是在父项目中进行统一管理
- 先创建父项目,需要注意的是父项目必须选择pom选项
- 由父项目继承出现子项目,如果手动设置,在子项目的pom文件中添加<parent>标签,添加父坐标即可
聚合
是指可以将多个模块,聚合称为一个整体
- 父项目必须是pom项目
- 子项目使用模块创建
刚开始的聚合项目什么都没有,他的作用全是靠子模块实现的。
创建子模块不能使用Maven project了,要使用Maven module
子模块创建后会在聚合项目中显示,但是实际编辑还是在子模块中进行的
同时聚合项目的pom.xml中也会有体现
部署(install)的时候只需要部署聚合项目即可,子模块会随着父项目自动部署
我们去maven的本地仓库中可以看到三个项目都已经部署了,但是父项目中没有jar包/war包,jar包/war包在对应的子项目中