Maven简介
简介
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM,Project Object Model)概念,Maven利用一个中央仓库能管理一个项目的构建、报告和文档等步骤。
官网地址:http://maven.apache.org/
Maven核心功能
Maven主要有两大核心功能:
1. 依赖管理。(jar包的管理)
2. 项目构建。(清理、编译、单元测试、打包、安装、部署、运行)
Maven环境配置
下载Maven库
下载地址:http://maven.apache.org/download.cgi
使用版本:apache-maven-3.5.0
配置Maven环境变量
1.右键我的电脑(或者计算机)-属性-高级系统设置-高级-环境变量-系统变量-新建MAVEN_HOME,值为maven的安装目录
2.把%MAVEN_HOME%\bin;追加到Path变量的值后面
3.检验是否成功:cmd-> mvn -v 或 mvn -version
4.修改配置文件:maven安装目录下conf目录中settings.xml
配置Maven仓库
Maven使用仓库管理各种jar包和插件。
Maven仓库分为:本地仓库(local)、远程仓库(remote)两大类
本地仓库: 本地电脑中的仓库。默认位置为: ${user:home}/.m2/repository
远程仓库: 远程仓库又包括:中央仓库+私服+其它公共远程仓库 (比如阿里、163等)
在maven的conf目录中找到
<!--第一个位置在根节点下添加本地仓库位置-->
<localRepository>D:\Repositories\Maven</localRepository>
<!--第二个位置,在mirrors节点下添加 中央仓库镜像-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!--第三个位置,在profiles节点下添加 jdk版本全局配置,因为默认为1.5-->
<profile>
<id>jdk18</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>
检索顺序:先检索本地仓库--再检索远程仓库--最后检索中央仓库
Maven入门
Maven程序目录结构
手动创建:
maven_hello
----src
-------main
----------java
-------------com
-----------------qf
--------------------Hello.java
resources
webapp (web项目)
-------test
----------java
-------------com
-----------------qf
-------------------test
----------------------HelloTest.java
----------resources
-----pom.xml
src/main/java:存放项目的.java文件
src/main/resources:存放项目资源文件。如配置文件
src/test/java:存放所有测试的.java文件.如Junit测试类
src/test/resources:测试资源文件
【target:项目输出位置(可以自动生成)】
pom.xml(maven项目核心配置文件)
pom.xml文件如下
<?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>
<!--组织id com.qf.maven GAV坐标 -->
<groupId>com.qf.maven</groupId>
<!--项目名 模块名-->
<artifactId>maven_hello</artifactId>
<!--项目版本 SNAPSHOT 快照 不稳定版本 RELEASE 发布版 稳定-->
<version>1.0-SNAPSHOT</version>
<!--打包形式 jar包-->
<packaging>jar</packaging>
<!--依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Maven常见命令
Maven的另一个核心功能是项目构建。
构建包括:清理、编译、测试、打包、安装、部署、运行等。这些过程都可以使用Maven命令来完成。
clean
mvn clean:清理(删除)编译的文件
使用插件:maven-clean-plugin:2.5:clean
compile
mvn compile:编译主目录的文件
使用插件:
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
test
mvn test: 编译并运行test目录的代码
使用插件:
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
package
mvn package:打包项目,jar包或war包
使用插件:
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar
install
mvn install:安装到仓库
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar
maven-install-plugin:2.4:install
mvn deploy:部署,部署到私服
mvn tomcat:run:运行
Maven构建生命周期
- Clean:项目构建前的清理操作
- Default(Build): 核心生命周期核心过程:编译,测试,运行,打包等等
- Site:项目站点文档创建。
Maven POM文件
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
POM 中可以指定以下配置:
项目依赖
插件
执行目标
项目构建 profile
项目版本
项目开发者列表
相关邮件列表信息
所有 POM 文件都需要 project 元素和三个必需元素:groupId,artifactId,version。这个必须元素叫做坐标(GAV)
Maven引入外部依赖
pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。
<dependencies>
<!--坐标GAV-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
依赖替代jar包
https://mvnrepository.com/(搜索所需依赖)
Maven传递依赖
当项目依赖一个jar包时,与这个jar包关联的其他jar包也会关联到当前项目,这种现象就是传递依赖。
比如A项目依赖B项目,B又依赖C项目, 此时A中也包含了C的依赖。
依赖传递出现的问题
依赖传递出现的问题: 经常出现jar包冲突,
解决方案:1 直接排除指定的jar包 2版本号限定原则
解决jar包冲突的方式(4种)
1 排除原则(常用)
<exclusions>
<exclusion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</exclusion>
</exclusions>
2 版本号限定原则(常用)
<properties>
<mysql.version>5.1.42</mysql.version>
</properties>
<!--02版本锁定-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 依赖管理 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
3 路径就近原则(基本不用)
4 第一声明优先原则(基本不用)
私服
正式开发时,不同的项目组开发不同的工程。dao工程开发完毕,发布到私服。service从私服下载dao。
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
搭建私服环境
下载nexus
Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。下载地址:http://www.sonatype.org/nexus/archived/
安装nexus
cmd进入bin目录,执行nexus.bat install
卸载nexus
cmd进入nexus的bin目录,执行:nexus.bat uninstall
启动nexus
方法1:
cmd进入bin目录,执行nexus.bat start
方法2:
windows服务中直接启动nexus服务
私服仓库类型
nexus的仓库有4种类型:
- hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库
- proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。
- group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
- virtual(虚拟):兼容Maven1 版本的jar或者插件
nexus仓库默认在sonatype-work目录中:
将项目发布到私服
1. 把dao模块上传到私服(如果上述setting.xml文件中配置过再次检查是否配置完整正确):
第一步:配置私服地址
1. 在settings.xml添加:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
2.在当前项目的pom.xml文件添加:
<!-- 配置远程发布到私服,mvn deploy -->
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
第二步: 运行 deploy命令,不同开发工具会有差异。
如果所有配置正确,发现上传私服失败,需要进入私服找到指定仓库
Repository--- Access Settings--Deployment Policy修改为允许发布
从私服下载jar包
3.service模块从私服下载dao包
1.1、在settings.xml文件中
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository>
<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
2.激活私服
<!-- 激活 -->
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
注意:
私服一般安装在内网的其他服务器上,而不是本机上。因此上面的配置中localhost的部分在实际情况中应该修改为公司中内网的私服服务器地址。