maven安装
- 去官网下载安装包
- 解压所下载文件,例如解压到:D:\apache-maven-3.5.0
- 配置Maven环境变量
在windows系统中,添加如下变量
a. MAVEN_HOME : D:\apache-maven-3.5.0
b. PATH : %MAVEN_HOME%\bin;
c. MAVEN_OPTS : -Xms128m -Xmx512m -Duser.language=zh -Dfile.encoding=UTF-8
通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx512m,因为Java默认的最大可用内存往往不能够满足Maven运行的需要,比如在项目较大时,使用Maven生成项目站点需要占用大量的内存,如果没有该配置,则很容易得到java.lang.OutOfMemeoryError。因此,一开始就配置该变量是推荐的做法。
- 测试安装配置是否正确
重新打开windows控制台,输入
mvn -version
出现mvn版本即说明安装成功
maven配置文件
默认全局配置文件地址:maven安装路径\conf\settings.xml
- 配置本地仓库
默认的本地仓库地址是 C:\Users\用户.m2\repository 目录。可以通过编辑settings.xml文件修改这个仓库地址。
<localRepository>D:\maven\repository</localRepository>
- 配置远程仓库
修改下载服务器的镜像地址: 有时候我们不能连接到默认的下载服务器或速度很慢,可以通过修改这个部分来解决。 找到 mirrors 部分,然后修改就可以了。例如修改为阿里云的镜像如下配置即可。
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
maven常用命令
mvn archetype:create 创建maven项目
mvn compile 编译项目
mvn deploy 发布项目
mvn package 打包项目
mvn test 运行测试代码
mvn site 生成项目相关信息的网站
mvn clean 清除之前编译和打包产生的文件
mvn install 将项目安装到本地仓库
聚合与继承
聚合
将多个项目一起编译,这种方式叫做聚合。
假设有A、B、C三个项目,A依赖于B、C两个项目,三者设定了传递依赖关系,但是此时不想一个一个的由高到低的编译/打包/安装。此时可以在A的pom.xml文件的根目录中加入如下元素标签,只需要对A进行打包安装即可实现对B和C的打包和安装,这种一同编译安装的方式,就叫做聚合。
<modules>
<module>../C</module>
<module>../B</module>
</modules>
继承
同样以A、B、C三个项目为例,A、B、C都有junit的依赖,但是每个pom.xml都要配置junit很麻烦了,这时候可以创建一个P,使得P拥有Junit的依赖,然后让A、B、C三个项目继承P即可。
P的pom.xml配置Junit
<groupId>cn.hewie</groupId>
<artifactId>maven-p</artifactId>
<version>0.0.1SANPSHOT</version>
<properties>
<junit-version>3.1.8</junit-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
A,B,C的pom.xml配置
<parent>
<groupId>cn.hewie</groupId>
<artifactId>maven-p</artifactId>
<version>0.0.1SANPSHOT</version>
</parent>
这样A,B,C就不用每个都配置Junit了,光继承P就可以了。
scope标签
scope在maven的依赖管理中主要负责项目的依赖管理,确认每个包的作用范围。
maven的哲学:约定大于配置,所以在maven中,很多内容都有默认值,scope的默认值是compile,那么scope还能有哪些选项呢?
scope的分类
- compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试、运行,是一个比较强的依赖。打包的时候通常需要包含进去
- test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
- runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
- provided:打包的时候可以不用包进去,别的包会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
- system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
pom.xml常见配置解析
以下以一个演示pom举例
<?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">
<!-- 指定了当前POM的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标 -->
<groupId>cn.hewie</groupId><!-- 反写的公司网址 -->
<artifactId>study</artifactId><!-- 一般是项目名+模块名 如 mcloud.db -->
<version>1.0-SNAPSHOT</version><!-- 大版本号.分支版本号.小版本号 snapshot 快照 alpha内测 beta公测 release稳定版 GA正式发布版本 -->
<!-- 聚合项目 -->
<modules>
<module>
../A
</module>
</modules>
<!-- 属性信息 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
</properties>
<!-- 项目依赖列表属性 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- version配置在properties属性中,此处为4.12 -->
<version>${junit.version}</version>
<!-- scope指定项目依赖阶段 -->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 插件列表 -->
<pluginManagement>
<plugins>
<plugin>
<!-- 插件项目坐标 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- tomcat插件具体信息配置 -->
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>