Maven
maven - 内行,专家
POM:Project Object Model 项目对象模型,把整个项目抽象成一个对象,按面向对象的思想去处理项目中所有的元素,方便对项目的管理。
作用:
项目构建:提供标准的、跨平台的自动化项目构建方式依赖管理:方便快捷方的管理项目依赖的资源(jar包),避免版本冲突统一开发结构:提供标准的、统一的项目结构
1. 安装和配置
Java语言编写
解压
配置环境变量(不使用DOS窗口的话,可不用配置)
MAVEN_HOME=path\apache-maven-3.3.9
Path=%MAVEN_HOME%\bin
Maven目录介绍
目录名功能说明
bin可执行文件所在的目录,其中mvn.cmd是它核心执行文件boot第三方类加载器confmaven的配置文件所在的目录,其中settings.xml是maven的核心配置文件lib因为maven是使用java写的,这是它的依赖jar包
仓库
本地仓库
私服:保存具有版权的资源,包含购买或自主研发的jar,一定范围内共享资源
中央仓库:maven团队维护,其中所有jar都是开源的,不能存储具有版权的资源
坐标
描述资源在仓库中的唯一标识创建每个项目或模块都需要指定一个坐标,这个坐标是指当前项目放在仓库中坐标,以后这个项目或模块可以被别人引用。每个jar包放在仓库中都有一个唯一的坐标,坐标是jar包唯一标识,不会重复。通过这个坐标找到每个jar包。
groupId 通常是域名反写,表隶属组织
artifactId 项目或模块名称
version 版本
配置文件
1. 修改本地仓库
<localRepository>f:\develop\repository
</localRepository>
要求本地仓库同级目录有setting.xml文件,作为个人设置,会覆盖全局设置
2. 设置中央仓库的镜像
<mirror>
<id>nexus-aliyun
</id>
<mirrorOf>central
</mirrorOf>
<name>Nexus aliyun
</name>
<url>http://maven.aliyun.com/nexus/content/groups/public
</url>
</mirror>
3. 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>
<project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding>
</properties>
</profile>
IDEA中的配置
Maven home directory 设置maven主目录
User setting file 配置文件路径
Local repository 配置本地仓库位置
Build, Execution, Deployment>Maven>Runner VM Options:
-DarchetypeCatalog=internal
所有资源先从本地仓库查找,如果本地仓库中没有才去互联网找。
-Dfile.encoding=GBK 或者 -Dfile.encoding=UTF-8
控制台乱码
如果在pom.xml中输入的jar包没有提示,可以手动更新本地仓库的索引
Build, Execution, Deployment -> Maven -> Repositories
pom.xml
<modelVersion>4.0.0
</modelVersion>
<groupId>javaee
</groupId>
<artifactId>day29_maven
</artifactId>
<version>1.0-SNAPSHOT
</version>
<packaging>war
</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet
</groupId>
<artifactId>javax.servlet-api
</artifactId>
<version>3.1.0
</version>
<scope>provided
</scope>
</dependency>
<dependency>
<groupId>junit
</groupId>
<artifactId>junit
</artifactId>
<version>4.12
</version>
<scope>test
</scope>
</dependency>
<dependency>
<groupId>mysql
</groupId>
<artifactId>mysql-connector-java
</artifactId>
<version>5.1.38
</version>
<scope>runtime
</scope>
</dependency>
</dependencies>
</project>
https://mvnrepository.com 在线查找jar包的坐标
依赖传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4iru3I8G-1593828012321)(F:\develop\Z_JavaEE\level_2_Maven.assets\1593826825546.png)]
可选依赖:对外隐藏间接依赖
<dependency>添加字标签<optinal>true</optional>
排除依赖:主动断开依赖的资源,无论版本
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
<exclusion>
<exclusions>
2. Maven的生命周期
这些命令可以在工作目录(pom.xml)同级目录下执行 如:mvn clean
clean 用于清除target目录,类似于清除缓存
target目录是项目执行期间自动生成的,类似于out目录
test 执行test目录下所有的测试类和测试方法
compile 编译main目录下所的Java源代码,生成字节码文件。不会去编译test目录下东西
package 用于把项目打包,如果是java工程,打包成jar。如果是web工程,打包成war,在pom.xml文件中已经配置。将整个项目打包到target目录下,以后要使用就可以从target目录下复制出来。会重新执行生命周期前面的命令,如果前面的命令执行失败,则打包也失败。
install 会执行上面所有的命令,先清除,再编译,再执行测试,再打包,最后安装到本地仓库中去
插件的使用
Maven只提供了基本的项目处理能力和管理,它的功能主要是通过其它插件来实现的。就好比jQuery和jQuery插件的关系。每个Maven插件可以完成一些特定的功能。
tomcat7插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven
</groupId>
<artifactId>tomcat7-maven-plugin
</artifactId>
<version>2.2
</version>
<configuration>
<port>8081
</port>
<path>/test
</path>
<uriEncoding>UTF-8
</uriEncoding>
<server>tomcat7
</server>
</configuration>
</plugin>
</plugins>
</build>
3. jar包的依赖范围
Maven在执行过程中有三种类路径,在运行时使用对应路径下的包来执行。
编译类路径(compile)
测试类路径(test)
运行时类路径(package)
依赖范围:
compile 默认,所有类路径都可以使用
provided 不参与打包(Servlet, Jsp)避免冲突
test 仅测试时使用(Junit)
runtime 编译期不使用(Mysql的驱动)