Maven项目管理工具
1Maven简介
1、什么是Maven Maven是跨平台的项目管理工具。主要服务鱼基于Java平台的项目构建,依赖管理和项目信息管理。
2、什么是理想的项目构建 清理--->编译--->测试--->报告--->打包--->部署 高度自动化,跨平台,可重用的组件,标准化的
3、什么是依赖?为什么要进行依赖管理? 自动下载,统一依赖管理
4、有哪些项目信息 项目名称描述等,开发人员信息,开发者信息
5、项目构建过程
2为什么使用Maven
不使用Maven:
1、手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
2、每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错
使用Maven:
1、拥有约定,知道你的代码在哪里,放到哪里去
2、拥有一个生命周期,例如执行 mvn install就可以自动执行编译,测试,打包等构建过程
3、只需要定义一个pom.xml,然后把源代码放到默认目录,Maven帮你处理其他事情
4、拥有依赖管理,仓库管理
Maven相关概念介绍
1、项目对象模型(POM)
2、坐标 什么是坐标
在平面几何中坐标(x,y)可以标识平面中唯一的一点
Maven坐标主要组成
groupId:定义当前Maven项目隶属项目
artifactId:定义实际项目中的一个模块
version:定义当前项目的当前版本
packaging:定义该项目的打包方式
Maven为什么使用坐标
Maven世界拥有大量构建,我们需要找一个用来标识
3依赖管理
3.1依赖声明
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
-
2依赖范围
依赖范围scope用来控制依赖和编译、测试、运行的classpath的关系 compile:默认编译依赖范围。对于编译、测试、运行三种classpath都有效。 test:测试依赖范围。只对于测试classpath有效。 provided:已提供依赖访问。对于编译、测试的classpath有效,但对于运行无效,因为容器已经提供,例如servlet-api runtime:运行时提供。例如jdbc驱动。
4仓库管理
何为Maven仓库
用来统一存储所有Maven共享构建的位置就是仓库
Maven仓库布局
根据Maven坐标定义每个构建在仓库中唯一存储路径
大致为:groupId/artifactId/version/artifactId-version.packaging
仓库的分类
本地仓库
~/.m2/repository/
每个用户只有一个本地仓库
远程仓库
中央仓库:Maven默认的远程仓库http://repo1.maven.org/maven2/
私服:是一种特殊的远程仓库,它是架设在局域
镜像:用来替代中央仓库,速度一般比中央仓库
5生命周期
何为生命周期
Maven生命周期就是为了对所有的构建过程进行抽象和统一
包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤
Maven三大生命周期
clean:清理项目的
default:构建项目的
site:生成项目站点的
6仓库
1、本地仓库 设置本地仓库:conf/setting.xml
7.Maven插件
Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的,每个插件都能实现多个功
能,每个功能就是一个插件目标。Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任
务。例如:compile就是插件maven-compiler-plugin的一个插件目标。
7.1jdk编译插件
7.2源码打包插件
1.解决idea中,创建web项目慢的方式:
在Properties中添加Name:archetypeCatalog和Value:internal,如下图那样
也可以在设置中指定Maven-Runne的VM: -DarchetypeCatalog为internal
打包插件pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar-no-fork</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
</plugin>
Tomcat插件:
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8081</port>
<server>tomcat7</server>
</configuration>
</plugin>
8.继承与聚合
继承是为了消除重复,可以把pom中很多相同的配置提取出来,如:groupId,version等。在使用的时候,子工程直接继承,父工程的依赖版本号,子工程中不再需要指定具体版本号,方便统一管控项目的依赖版本问题。
父工程的设置:父工程的pom.xml中打包的方式必须设置为pom方式。
8.1聚合工程的作用
如果想一次构建多个项目模块,那则需要对多个项目模块进行聚合
<modules>
<module>子项目名称1</module>
<module>子项目名称2</module>
<module>子项目名称3</module>
</modules>
8.2继承与聚合
聚合主要是为了快速构建项目;继承主要是为了消除重复。
9.Maven私服
9.1私服的好处
缓存Maven中央仓库的jar包,这样不需要每次本地仓库没有jar包而不必到中央仓库下载,而是到私服下载。
解决公司无法上网,而又要连接中央仓库的问题。只要连接私服,确保私服可以连接到中央仓库。
方便公司内部不同团队或者项目共享jar包,需要共享jar包,可以上传到私服,通过私服共享。
9.2Nexus安装与仓库概念
Nexus下载地址:https://www.sonatype.com/nexus-repository-oss
安装:
解压文件
启动服务 nexus.exe /run (启动成功后不要关闭命令行窗口)
安装服务 nexus.exe /install (重新使用新的命令行安装,可能出现权限不足,请以管理员身份运行命令行)
启动服务 net start nexus
停止服务 net stop nexus
访问页面 http://localhost:8081/
初始登录用户名和密码:admin/admin123
9.3从Nexus私服下载资源
找到maven配置文件settings.xml,添加如下配置
1)添加镜像配置,将所有访问外网仓库的请求指向私服
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
2)添加profiles,所有请求均通过镜像
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
3)生效配置
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
9.4上传资源到Nexus私服
1)在pom.xml中配置,上传资源到nexus
<distributionManagement>
<repository>
<id>release</id>
<name>Internal Release</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Internal Snapshots</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
2)在maven的配置文件中配置上传权限
<server>
<id>release</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>