目录
安装和环境变量
官网(Maven – Welcome to Apache Maven),选择对应版本的bin.zip文件下载。
配置环境变量:
MAVEN_HOME:E:\apache-maven-3.9.3,path:%MAVEN_HOME%\bin
cmd输入mvn -v检查是否安装配置成功。
maven配置
打开conf的settings.xml
配置本地仓库
在55行添加:
<localRepository>E:\apache-maven-3.9.3</localRepository>
仓库分类
本地仓库>私服(如果配置了的话)>公共仓库(如果配置了的话)>中央仓库
本地仓库
本地仓库是自己电脑中的仓库,即在settings.xml文件中配置的目录。 项目中使用过的依赖都会自动存储在本地仓库中,后续可以复用。
远程仓库(三种)
中央仓库
Maven中央仓库是由Maven社区提供的仓库,不用任何配置,Maven中内置了中央仓库的地址。其中包含了绝大多数流行的开源Java构件。 可以通过仓库搜索服务网址https://mvnrepository.com/搜索需要的依赖的相关信息。中央仓库地址:Central Repository:
公共仓库
中央仓库在国外,下载依赖速度过慢,所以都会配置一个国内的公共仓库替代中央仓库。
常用阿里云仓库(仓库服务 )
私服
通过Nexus来创建、管理一个私服,不对外开放。
配置阿里云仓库
阿里云仓库介绍:
name:仓库名
type:仓库类型
group:仓库组,可以包含多个仓库,客户端值需要连它就可以连到它所管理的所有仓库
proxy:代理仓库,去中央仓库或者镜像仓库啦jar包并且保存的。我们可以在这里配置成阿里云的镜像
hosted:本地仓库,自己公司的项目,或者上传一些其他公司的jar。
Format:仓库格式
Status:仓库状态
URL:客户端连接的url地址
health check:健康检查
仓库种类
- maven-central:代理仓库,去中央仓库或镜像仓库拉jar包
- maven-public:仓库组,默认把其他几个java仓库全部包含了进来,一般直接连它就好了
- maven-releases:release版本仓库,一般把正式发布的jar包上传到这里
- maven-snapshots:snapshot版本仓库,一般把还没正式发布,但是其他人员又需要的jar上传到这里
配置阿里云仓库
在settings.xml的mirrors标签里添加:
<!-- 配置阿里云镜像仓库 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置jdk8
在profiles标签里添加
<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>
配置jdk17
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
idea关联maven
创建maven项目
1.选择项目Generators:Maven Archetype,archetype里添加相应的web版本
2.搭建项目结构:
src/main/java:存放源代码,建包,放项目中的代码(service,dao,entity...)
src/main/resources:书写配置文件,项目中的配置文件(database.properties)
src/test/java:书写测试代码,项目中测试案例代码
src/test/resources:书写测试案例相关配置文件
目录/pom.xml(project object model)maven项目核心文件,其中定义项目构建方式,声明依赖等
3.项目关联:
- src/main/java 关联为 Sources Root:(右击java》选择mark Dirctory as》选择Sources Root)
- src/main/resources 关联为Resources Root:(右击resources》选择mark Dirctory as》选择Resources Root)
- src/test/java 关联为Test Sources Root:(右击test文件夹下test》选择mark Dirctory as》选择Test Sources Root)
- src/test/resources 关联为 Test Resources Root:(右击test文件夹下resources》选择mark Dirctory as》选择Test Resources Root)
4.配置pom.xml,根据项目类型,在pom.xml中做出对应配置,添加配置war/jar
5.添加jar包,在dependencies标签里添加,相关依赖可从https://mvnrepository.com/ 中查找
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope></scope>
</dependency>
maven标签
maven结构
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 基础设置 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<name>...</name>
<description>...</description>
<url>...</url>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!--构建设置 -->
<build>...</build>
<reporting>...</reporting>
<!-- 更多项目信息 -->
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- 环境设置-->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
dependence标签
<dependency>
<groupId>groupB</groupId>
<artifactId>artifactB</artifactId>
<version>1.0</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>groupC</groupId>
<artifactId>artifactC</artifactId>
</exclusion>
</exclusions>
</dependency>
使用exclusion排除依赖:假设有这样一种依赖关系,A->B->C,这个时候由于某些原因,我们不需要对C的依赖,但是我们又必须要对B的依赖,这个时候该怎么办呢?针对这种情况,Maven给我们提供了一个exclusion功能,我们可以在添加A对B的依赖时申明不需要引进B对C的依赖。
在定义项目的依赖项的时候,我们可以通过scope来指定该依赖项的作用范围。scope的取值有compile、runtime、test、provided、system和import。
- compile:这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。
- runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
- test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。
- provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。
- system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。
可选的依赖项表示可有可无,不一定需要的,它只是做一个标记。为了便于大家理解,我们先看这样一种情况,假设项目B依赖于项目C,这个时候我们把B对C的依赖利用optional标记为可选的,它意味着B中只有部分地方用到了C,并不是必须要的,当你依赖于B,但是又不需要使用到B的C功能时,可以不依赖于C。这样当A->B->C时,在建立项目A的时候将不会加入对C的依赖,因为C对B是可选的,我们不一定会用到C。但是在建立项目B的时候,Maven就会加入对C的依赖。也就是说这种标记为optional的依赖项对项目本身而言是没有什么影响的,它影响的是以该项目作为依赖项的其他项目,如这里的项目A。这种可选的依赖项有一个好处就是它会默认的作为exclusion项排除
properties标签
使用properties标签配置项目版本,可将项目的版本号配置为一个属性,以方便统一管理和修改版本号。
bulid表示对项目的一些编译配置
plugins 插件配置
parent继承父类模块:常和module配合创建聚合工程,子工程使用此标签标记父工程
modules标识子模块列表:常和parent配合创建聚合工程,父工程使用此标签标记子工程
dependencyManagement:父工程管理依赖的版本 不做实际引入