Maven的作用
- 管理jar文件
- 自动下载jar文件
- 自动管理依赖jar文件,比如a.jar依赖b.jar那么maven会自动帮你下载
- 能管理jar包的版本
- 编译
- 测试
- 打包文件为jar或者war
- 部署项目
构建(面向过程的)
清理:将之前构建的代码删除掉,准备重新编译
编译:将java源代码批量编译成class文件
测试:测试代码,也能同时测试多个代码
报告:生成测试结果文件,测试通过没有
打包:将项目中所有的class文件,配置文件等所有的资源放到一个压缩文件
中,这个压缩文件通常是结果文件,通常是jar或者是war,java应用
是jar,web应用是war。
安装:将打包(上面那个步骤)生成的结果文件放到本地仓库中
部署:将程序安装好可以运行
Maven的核心概念
主要概念:
- pom:project object model,(项目对象模型)maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖。
- 约定的目录结构:maven的目录和文件的位置都是规定的
- 坐标:是一个唯一的字符串,用来表示资源的
- 依赖管理:管理你的项目中可以使用的jar文件。
- 仓库管理:资源存放的位置
- 生命周期:maven工具构建项目的过程
- 插件和目标:执行maven构建的时候用的工具是插件
- 继承
- 聚合
maven的使用
bin目录:执行程序,主要是mvn.cmd
conf目录:settings.xml配置maven
注意:使用maven需要配置JAVA_HOME环境变量(有时也需要配置M2_HOME环境)
maven的目录结构
Hello/
-------/src
------------/main
--------------------/java 放置主程序的java源代码
--------------------/resources 放置主程序的配置文件
------------/test
--------------------/java 测试文件源代码
--------------------/resources 测试代码配置文件
-------/pom.xml maven核心文件(必须有)
mvn compile命令
第一次执行该命令,会进入自动下载很多东西,这些东西是很多的jar文件,他们是一些插件,实际上是java类。
默认的保存位置是c盘登录的系统用户名下的m2/repository下面(默认仓库)
执行后,会生成一个target目录(结果目录),maven编译后的java文件都放在target中
仓库
仓库是用来保存maven需要的插件(jar文件)和项目所需的jar包。
分类:
- 本地仓库:就在本台计算机的某个位置(文件夹)
- 远程仓库:
2.1: 中央仓库:全世界的开发人员都共同使用的仓库
2.2:中央仓库镜像:对于每个洲都有一个中央仓库的备份,类 似于代理。
2.3:私服:局域网中的仓库,经常是公司的内部,不对外使用。
仓库的访问次序(maven自动)本地–》私服–》镜像–》中央
如果访问远程,每次查找到都会在本地存储一份,下次就在本地查找
修改本机仓库(下载位置)
打开maven的安装目录,打开conf文件夹中的settings.xml
localRepository中设置你想要保存的仓库位置
pom.xml
- modelVersion maven模型的版本
- grouopId:组织id,一般是公司域名的倒写,也可是域名+项目名
- artifactId:项目名称
- version:三位数字版本,如果还处于开发阶段通常是1.snapshot
- 上面三个(groupId,artifactId,version,简称gav)表示坐标,用来标识唯一一个项目。
- packaging:将项目指定打包成指定的文件(jar,war,rar,ear,pom),默认是jar
- denpendencies和denpendency:指定依赖
- properties:设置属性
- build:maven配置文件时,配置信息,如编译时使用的jdk版本
- parent:继承,多个模块需要相同的配置,如坐标相同,就可以声明为这个,类似java继承
- moduls:聚合
maven常用命令(部署到服务器)
maven使用命令实际上是使用插件功能(jar文件)
- mvn clean:清理上次生成的编译文件
- mvn compile:编译src/main下的java文件到classes下,同时将resources下的配置文件,全部拷贝到classes目录下。
- mvn test-compile:编译src/test下的java文件
- mvn test:生成surefire-reports目录生成报告文件,批量执行测试代码
- mvn package:将项目打包成指定的压缩文件
- mvn install:将压缩文件放入到本地的仓库中
- mvn deploy:会把本工程打包,放到本地仓库和私服还有web容器中
这里重点讲一下最后一个命令(因为挺方便的,自己试了三四个小时才弄好)
我们自己写了一个web项目,当我们想把这个项目挂到服务器上让别人访问(上线),就得手动拷贝war包过去放到webapp目录下,maven是很好用的工具,可以帮我们一键热部署到tomcat服务器上
这里我用的服务器是阿里云的。idea 2019+maven 3+tomcat9
版本不同配置也不同,今天差点没给我整吐了。
- 创建maven的web工程(网上很多教程说要设置maven根目录下的settings.xml文件,然后添加server节点)
然后我没加也能照样部署,这个过程可以跳过 - 这里才是第一步。。。在服务器设置账号密码,tomcat的conf目录下的tomcat-users.xml添加如下信息
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="lzb" password="lzbroot" roles="manager-gui,manager-script"/>
这里的账号密码自己设置
3. 最重要的一点来了!设置webapp目录下的context.xml文件
4. 在你maven的pom.xml添加如下信息,这里很重要
他这文件里,默认allow不是这样的,这是允许访问tomcat的IP段,是一个正则表达式,修改成上面这种就谁都能访问了,我在这卡了三个小时。。。。。。
- 后面的都跟网上教程差不多,配置你的web中的pom.xml文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 直接访问 Tomcat 服务器的 manager -->
<url>http://60.205.170.141/manager/text</url>
<server>tomcat9</server>
<port>80</port>
<username>lzb</username>
<password>lzbroot</password>
<update>true</update>
<path>/mvn</path>
</configuration>
</plugin>
url后面那个manager/text是必须加的
6. 运行命令mvn clean 然后mvn tomcat7:deploy(之后重新部署是mvn tomcat7:redeploy),然后就完事了
绑定成功。。真的舒服
总结:
服务器上的context.xml和tomcat-users.xml进行配置
本机直接添加插件和对应的信息,运用命令就可一键构建
插件
在bulid下定义插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
其中的configuration中的信息:(这些也可以在properties下设置)
source:配置jdk的版本为1.8
target:项目需要在1.8的版本上运行
ide中使用Maven
maven-archetype-quickstart:普通javase项目
maven-archetype-webapp:javaweb项目
在Vm Option中加上 -DarchetypeCatelog = internal不会自动下载模板,可以加快maven的构建速度
<properties>
maven构建项目使用utf-8编码
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
编译java所使用的jdk版本
<maven.compiler.source>1.7</maven.compiler.source>
项目应该运行在指定的jdk版本之上
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
依赖管理
依赖的范围
作用:指定哪些时候使用对应的依赖
- compile:范围最大,会在需要编译的阶段使用
- test:只在测试的时候使用
- provided:只在测试和运行时有效,对于打包或者部署由提供者提供,项目不自带
在坐标后面(gav)添加scope
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
这个是使用test和provided的效果
这个则是使用compile的效果
属性设置
在properties中进行属性设置
其中重要的一个是自定义标签(变量名)
在properties中使用自己定义的标签,在需要的地方使用${变量名}就可以引用到自己设置的值,如果有多个,则只要改一个即可
资源插件
当我们使用mvn compile命令时,会吧src/main/java/resources下的文件全部拷贝到target/classes下面,但是如果我们在src/main/java中不只有java文件,还有一些配置文件,他默认是不会拷贝的,这时候就需要一个资源插件来告诉maven帮我们把指定的文件拷贝过来
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>
*.properties
</include>
<include>
*.xml
</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>