maven介绍
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具[百度百科]
简单的说就是一个实现自动化构建的工具。
构建
是指由源文件、配置文件、图片、js、css等项目中所需要的所有的原材料生成一个可执行的应用程序的过程就叫构建
如何使用
1、安装
1)下载压缩包,解压操作
a、要使用maven工具前提:jdk环境、maven工具所在路径尽量不要有中文和空格
2)配置maven的环境变量
与jdk配置相似:变量名MAVEN_HOME
值D:\tool\apache-maven-3.5.4
2、仓库
maven的功能是构建项目,管理jar包–jar包的存储位置:
1)此位置包括三种:本地位置(在本机-当前计算机)—本地库、局域网中某台计算机–私服、internet网络—中央仓储、镜像仓储
2)如何配置本地库:在settings.xml中localRepository标签内配置本地库;如果没有配置本地库,那么本地库是默认路径:默认路径一般是当前计算机登录用户的家目录中.m2的文件夹,其中有repository文件夹就是。
3)镜像库的配置—在settings.xml中有mirrors标签,在其中添加镜像配置
4)如果镜像库没有配置,直接到中央库找
5)中央库https://mvnrepository.com/
3、maven工具是一个构建工具,要先有原材料,才能生成应用程序;先准备原材料
1)准备原材料:.java的源文件
2)创建maven项目—java项目、web项目
3)maven项目有路径格式的要求
java项目文件夹—src文件夹-----main文件夹-------java文件夹
----------------------------------------------------resources/resource文件夹
-------------------------------------test文件夹----------java文件夹
----------------------------------------------------resources/resource文件夹
-----------------pom.xml文件
顶级文件夹是项目文件夹;
在项目文件夹中有src文件夹和pom文件;
在src文件夹中又有main和test两个下级文件夹;
在main和test文件夹中分别又有java和resource文件夹
注:maven项目路径约定好,不能改变
项目实现:约定>配置>代码
maven web项目结构
pom.xml 核心配置
src/main/java java源码
src/main/resources java配置
src/main/webapp myeclipse web项目中 WebRoot目录
|-- WEB-INF
|-- web.xml
src/test 测试
target 输出目录
4)java非测试类放到main文件夹的java文件夹,所有的测试类放到test文件夹的java文件夹;所有项目中最发布时要用到的配置文件放到main文件夹的resource文件夹中;测试时用到的配置文件放大test文件夹的resource文件夹中
5)maven工具不能自己实现原材料,需要借助其他工具准备原材料;所以eclipse和maven进行整合;idea和maven进行整合
(1)目前eclipse工具已经整合了maven插件;查看maven整合情况和版本
(2)在eclipse中创建maven项目—java项目和web项目
以创建maven的java项目为例
在eclipse中选择maven project
接下来界面中选择create a simple project
接下来
group id设置项目分组—一般就是域名倒置
artifact id设置项目名
version设置版本号
packaging设置当前是java还是web项目,或者父项目
5、eclipse和maven整合之后,创建一个web项目;需要注意当创建完成时,是没有web项目的标志的即没有WEB-INF文件夹和web.xml文件;所以可以自定义;借用eclipse生成
方法一:项目右击—Java EE Tools----Generate xxxx
方法二:注意事项:利用eclipse和maven整合之后的web项目,创建的时候jdk默认版本是1.5;如何修改为1.8版本;到如上图所示的位置修改;
可以在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>
</profile>
项目构建的环节
1、构建环节—重要的环节
1)清理环节:是指将以前生成的字节码文件删除,为新生成字节码文件做准备;清理环节对应一个命令:mvn clean
2)编译环节:是指由源文件生成字节码文件;编译环节对应的命令:mvn compile
3)测试环节:是指对test–java包中的代码(测试代码)进行运行;对应的命令:mvn test
4)打包环节:是指对项目文件进行打包,最后根据java项目还是web项目生成相应的压缩包;如果是java项目那么生成.jar包,如果是web项目生成.war包;对应的命令时:mvn package;生成的包的名称组成是:项目名+版本号
5)安装环节:是指将生成的包,上传到仓库里面的操作;可以上传到本地库的命令:mvn install
6)部署环节:是指项目部署到服务器,命令是:mvn site
当执行靠后的构建环节命令时,会从最开始的环节构建起。
2、当把压缩包上传到仓库的时候—本地库,看到了路径关系,这个路径关系是和当前项目的组名、项目名、版本号有关;这三项内容:组名、项目名、版本号共同组成一个坐标。由这个坐标可以唯一确定一个包
版本介绍:
例如:2.0.2.RELEASE
2:主版本号,当功能模块有较大更新或者整体架构发生变化时,主版本号会更新
0:次版本号,次版本号表示只是局部的一些变动
2:修改版本号,一般是bug的修复或者是小的变动
RELEASE:希腊字母版本号,次版本号用户标注当前版本的软件处于哪个开发阶段
希腊字母版本号:
BASE:设计阶段,只有相应的设计没有具体的功能实现
ALPHA:软件的初级版本,存在较多的bug
BATE:表示相对ALPHA有了很大的进步,消除了严重的bug,还存在一些潜在的bug
RELEASE:表示该版本是最终版
maven中的特性
1、依赖—最终当前项目需要其他的项目所生产的jar包,这些jar包可以成为依赖
2、如何在maven项目中设置依赖:即当前项目需要哪些jar包;到pom.xml文件中实现配置
<dependencies>
<dependency>
坐标
</dependency>
</dependencies>
例如:
<dependencies>
<!-- 设置一个spring的核心包spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.21.RELEASE</version>
</dependency>
</dependencies>
3、maven工具可以帮助管理jar包,维护依赖关系
4、依赖的传递性:当在当前项目中配置实现依赖的时候,换句话说就是当前的项目需要一个jar包,那么假如jar中的类里面的代码又需要另一个jar包,那么此时当前项目在配置第一个jar包时会把第二个jar包一起依赖过来
5、依赖的作用范围
1)根据jar中的类可以在哪使用,是否被发布
在哪个位置使用:是指当前的jar包中类等内容是否可以在main–java源文件中使用或者是test-java源文件中使用
是否被发布:是指当前的jar包是否在部署被部署到服务器
2)如何设置作用范围
在坐标之后添加标签,比如
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.21.RELEASE</version>
<scope></scope>
</dependency>
有五个值可以选择:compile、test、provided、runtime、system
compile值表示当前的jar包中的类等内容可以在main-java的源文件中被使用,也可以在test-java源文件被使用,同时参与部署;
test值表示当前jar包中的类等内容可以在test-java的源文件中被使用,不能再main-java中被使用;同时不参与部署
provided值表示当前jar包中的类等内容可以在main-java源文件和test-java源文件中被使用,不参与部署
runtime,表示测试和运行时使用当前jar,编译时不用该jar包。例如:JDBC驱动。JDBC驱动,在编译时(也就是我们写代码的时候都是采用接口编程,压根就没使用到JDBC驱动包内任何东西,只有在运行时才用的到,所以这个是典型的使用runtime这个值的例子)
system:表示我们自己手动加入的jar包,不属于maven仓库(本地,第三方等),属于别得类库的这样的jar包,只在编译和测试期生效,运行时无效。一般不用
默认值compile
6、在eclipse和maven整合之后,通过eclipse实现代码的开发,而通过maven实现后续操作:清理、编译、测试、打包、安装、部署
一个web项目,需要先部署才能测试,那么可以在maven的pom.xml文件中添加插件:
配置
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>81</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
添加此插件之后,可以替代eclipse中的tomcat整合,实现通过此插件实现部署
7、排除性
1)从当前项目中将指定的jar包排除,是指当由传递特性,在依赖一个包的时候会把另一个jar包同时依赖过来,假设不需要同时依赖这另一个包,那么采用排除性;
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.21.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
</exclusions>
</dependency>
8、依赖就近原则
1)如果当前项目直接依赖和间接依赖,那么最终按照就近原则肯定是直接依赖。
2)就近是在pom.xml文件中按照先后顺序,哪个依赖在前,那么哪个依赖作为作为最终的
<!-- 06项目依赖01项目:spring的23版 -->
<dependency>
<groupId>com.offcn.maven</groupId>
<artifactId>day09-maven-01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 06这个项目依赖02这个项目,spring的21版 -->
<dependency>
<groupId>com.offcn.maven</groupId>
<artifactId>day09-maven-02</artifactId>
<version>1.0</version>
</dependency>
9、版本号的统一管理
1)在pom.xml文件中,依赖设置,在起初设置了一种版本,后来由于需求可能需要变动另一种版本;那么如果pom.xml文件中没有采用统一版本管理,就会出现一个版本号一个版本号的修改,不方便;所以统一版本管理操作
2)如何实现
pom.xml文件中添加
<properties>
<spring-version>4.3.21.RELEASE</spring-version>
</properties>
标签是自定义的
原来的依赖位置的版本设置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
10、继承特性
1)在创建maven项目的时候,可以先创建父项目,再创建子项目,使子项目继承父项目;目的是在父项目中进行统一管理
2)实现
A、先创建父项目,需要注意的是父项目必须选择pom选项
B、由父项目继承出现子项目,如果手动设置,在子项目的pom文件中添加标签,添加父坐标即可
11、聚合
1)是指可以将多个模块,聚合称为一个整体
2)实现
a、父项目必须是pom项目
b、子项目使用模块创建