maven
安装路径:
http://maven.apache.org/downloa/d.cgi
文件内容:
bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
lib:含有Maven运行时所需要的java类库
conf:含有settings.xml配置文件
settings.xml 中默认的用户库: ${user.home}/.m2/repository[通过maven下载的jar包都会存储到此仓库中]
配置环境变量
maven环境变量配置,配置方式跟jdk有些类似。
新建环境变量MAVEN_HOME(值为maven的根目录)、然后在PATH环境变量里加入%MAVEN_HOME%\bin;即可。
输入mvn –v进行查看
仓库配置
本地仓库:就是Maven在本机存储构件的地方。maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建。maven本地仓库的默认位置:在用户的目录下都只有一个.m2/repository/的仓库目录;可以修改
D:/repository/maven
*仓库:包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。开源的Java项目依赖的构件都可以在这里下载到。
*仓库的地址:https://repo1.maven.org/maven2/
私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
阿里云镜像配置
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
生命周期
clean 清理
validate
install 打包
site 站点
clean: 主要目的是清理项目(第一生命周期)
pre-clean: 执行一些清理前需要完成的工作
clean: 清理上一次构建生成的文件
post-clean: 执行一些清理后需要完成的工作
default:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分
validate
initialize
generate-sources
process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中
generate-resources
process-resources
compile: 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中target
process-classes
generate-test-sources
process-test-sources: 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中
generate-test-resources
process-test-resources
test-compile: 编译项目的测试代码,一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中
process-test-classes
@Test
test: 使用单元测试框架运行测试,测试代码不会打包或部署
prepare-package
package: 接受编译好的代码,打包成可发布的格式,如JAR
pre-integration-test
integration-test
post-integration-test
verify
install: 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy: 将最终的包复制到远程仓库(私服),供其他开发人员和Maven项目使用
site生命周期: 建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成站点
pre-site: 执行一些在生成项目站点之前需要完成的工作
site: 生成项目站点文档
post-site: 执行一些在生成项目站点之后需要完成的工作
site-deploy: 将生成的项目站点发布到服务器上
pom 详解
<!--固定的-->
<modelVersion>4.0.0</modelVersion>
<!--描述当前项目的组织-->
<groupId>cn.cdqf</groupId>
<!--描述当前项目的唯一id-->
<artifactId>maven_01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--定义打包的方式
jar:默认方式
war: web项目最终打成war包 放在服务器上运行
pom:其它项目的父亲
-->
<packaging>war</packaging>
<!--spring jar包有50个 组织+id+版本
定义常量
-->
<properties>
<junit.version>4.12</junit.version>
</properties>
<!--项目所有依赖都写在这里面
每一个<dependency>就表示一个依赖
groupId+artifactId+version :精确在仓库中定位一个jar
-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<!--依赖范围-->
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
<!--排除当前jar依赖的某个jar包 一般在jar包冲突的时候使用-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
scope介绍
例如:测试时有效依赖
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
scope定义了依赖的范围,默认是compile。
compile:编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包;
test:测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;
provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,
tomcat等容器已经提供,无需Maven重复引入;
runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;
system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用
jar包冲突
SDK (优秀的开源项目),依赖于某些依赖。
使用SDK时,依赖问题
引入条件:
maven聚合(重点难点)
创建父模块-packaging标签中pom
<!--定义打包的方式
jar:默认方式
war: web项目最终打成war包 放在服务器上运行
pom:其它项目的父亲
-->
<packaging>war</packaging>
子工程 utils:
当子工程dao 中需要引用时:
面试
Maven常用命令Maven常用命令
- 编译源代码: mvn compile
- 编译测试代码:mvn test-compile
- 清除产生的项目:mvn clean
- 运行测试:mvn test
- 打包:mvn package
- 在本地Repository中安装jar:mvn install
- 上传项目到远程仓库:mvn deploy(更多是私服,需要用户名密码等认证)
- 产生site:mvn site 站点,对整个项目的描述,需要加入如下插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-site-renderer</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
游览器打开,详细项目描述-英语