- 什么是maven?
基于项目对象模型(pom),可以用来管理项目的构建、报告和文档的软件项目管理工具。统一帮助我们管理第三方jar包。
- 下载maven
bin:mvn的运行脚本
boot:一个类加载器框架,加载自己的类
conf:配置文件
lib:所有的类库
- 配置:
电脑自己使用,就在系统变量里创建,多人使用为避免给他人造成麻烦,则使用用户变量。
系统变量添加:
M2_HOME=E:\myprograms\Maven\apache-maven-3.3.3(解压的文件目录)
PATH后面加:%M2_HOME%\bin
cmd查看安装是否成功:
mvn -v
结果:
C:\Users\CL>mvn -v
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home: E:\myprograms\Maven\apache-maven-3.3.3
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: E:\java\jdk1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
----成功
- maven的hello world项目
maven目录结构:
src
-main
-java
-resources
-test
-jave
-package
-resouecre
操作:
在 E:\myprograms\Maven\下建立code目录,存放代码。
- Pom.xml
<modelVersion>4.0.0</modelVersion> :maven版本
<groupId></groupId>:包名
<artifactId></artifactId>:项目名
<version></version>:版本
- maven命令:
mvn -v:查看版本
mvn compile:编译
test:测试
package:打包
clean: 删除target
install:安装jar到本地仓库
archetype插件帮助创建maven规定的目录框架
方法二:mvn archetype:generate -DgroupId=com.imooc.maven04 -DartifactId=maven04-demo -Dversion-1.0.0SANPSHOT -Dpackage=com.imooc.maven04.demo
结果:
groupId: com.imooc.maven04
artifactId: maven04-demo
version: 1.0.0
——DgroupId:公司网址反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包名
package: com.imooc.maven04.demo
方法一:mvn archetype:generate +回车--》按提示创建
- maven的坐标和仓库:
坐标:
eg:
<groupId>com.imooc.maven01</groupId> 公司网址反写+项目名
<artifactId>maven01-model</artifactId> 目名-模块名
<version>0.0.1SANPSHOT</version>
仓库:
本地仓库
远程仓库
本地找不到去远程,远程找不到,报错,找到则下载到本地。
全球仓库地址: <url>https://repo.maven.apache.org/maven2</url>
如何找全球仓库地址:
打开maven-----》
apache-maven-3.3.3\lib\maven-model-builder-3.3.3\org\apache\maven\model----》
找到pom.4.0.0.xml里就有Central Repository
所有的pom文件都是它pom.4.0.0.xml的继承
- 镜像仓库:
仓库是国外的,无法访问外网,国内有其镜像仓库
修改镜像仓库位置
到apache-maven-3.3.3\conf--->找settings.xml的146行
复制
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
修改内容为:
<id>maven.net.cn</id>
<mirrorOf>central</mirrorOf>
<name>central mirror in chinese</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>
更改仓库位置:
所有仓库文件都在C:\Users\CL\.m2\repository
eg:
settings.xml 54行复制出来,
<localRepository>/path/to/local/repo</localRepository>
---》在maven里创建repo
----》将54行改为如下,并保存
<localRepository>E:/myprograms/Maven/repo</localRepository>
将settings.xml复制一份放到repo下,这样以后,maven版本变了不用再修改settings.xml.
- eclipse安装maven插件和创建项目
myeclipse或者eclipse4.0以上不用安装插件。
判断方式:进入eclipse-->window->references里有无maven选项
- maven生命周期:
完整项目构建过程:
清理、编译、测试、打包、继承测试、验证、部署
maven的三套生命周期:
clean:清理项目
pre_clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post_clean:执行清理后的所有文件
default:生成项目(最核心)
常用的:
compile、 test、 package、 install
site:生成项目站点:根据pom的信息
pre_site:生成站点前的工作
site:生成项目的站点文档
post-site 在生成项目站点后完成的工作
site-deploy:发布生成的站点到服务器上
相互独立,每个生命周期包含一些阶段,各个阶段有顺序,后面依赖前面的,但不会触发其他生命周期。
clean compile test package install
运行package这个阶段时,compile和test会顺序执行
maven的source插件使用,package阶段时就打包,生成**-source.jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- pom.xml的常用元素
<groupId>反写公司名+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>0.0.1SANPSHOT</version>第一个0,大版本号,第二个0,分支版本号,第三个0,小版本号。snapshot 快照
alpa 内部测试
beta 公测
Release 稳定
GA正式发布
<package></package>
打包方式,默认jar
<name></name>项目描述名
<url></url> 项目地址
<description></description>
<developers></developers>
<licenses></license>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope>test</scope>依赖的范围
<optional>true(子项目要显示指名该依赖)/false(默认:子项目可以继承该依赖)设置依赖是否可选
</optional>
<exclusions><!--排除依赖传递>
</exclusions>
</dependency>
</dependencies>
<dependencyManager>
<dependencies>
<dependency>这里的依赖不会被实际引用,主要用于定义在父模块中,子模块继承
</dependency>
</dependencies>
</dependencyManager>
<build>
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<parent>子模块对父模块pom的继承
</parent>
<modules>
<module>
</module>
</modules>
- maven依赖范围
<dependent>
<><><>
<scope>test</scope>依赖只存在于test中
<dependency>
scope的值:
compile:默认测试编译运行都有效
provided:测试编译有效
runtime:测试运行有效
test:测试范围有效,junit
system=provided与本地系统关联,项目移植,路径不一致出问题
import:
用在</dependencyManager>,用于将其他pom中的依赖以
- 依赖的传递:
<exclusion>排序继承的依赖
依赖:短路优先
先声明的优先