maven是什么
maven是通过项目模型pom文件来编译打包项目,并在此过程通过插件中执行一些特定的目标。
官方文档参考 https://maven.apache.org/guides/introduction/
1.pom文件解析
1.1 maven依赖(GAV参数)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
1.1.1 scope类型及意义
- complie 参与编译,参与打包
- test 测试阶段参与编译,不参与打包 ,如junit
- provider 外部提供,不参与编译,也不参与打包,如servlet-api.jar
- runtime 不参与编译,参与打包,如jdbc驱动
- system 本地依赖,参与打包,参与编译
1.1.2 传递依赖重合
当依赖的依赖出现GA参数相同时,jar包选择参照最短路径原则和优先声明原则。
1.1.3 排除依赖
当传递依赖选取的jar包版本不对时,可以通过排除依赖调整传递依赖的优先级
1.2声明依赖
声明依赖并没有引入依赖。作用是作为父pom,对子工程的依赖版本进行管理。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3maven聚合和继承
聚合pom的打包方式必须是pom
<groupId>com.leaf</groupId>
<artifactId>leaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<!-- 共用依赖 -->
<module>api-common</module>
<module>app-common</module>
<!-- 配置中心 -->
<module>app-config</module>
<!-- 注册中心 -->
<module>app-registry</module>
<!-- 反向代理 -->
<module>app-api-gateway</module>
<!-- 分布式服务 -->
<module>app-push-service</module>
<module>app-user-service</module>
<module>app-im-service</module>
<!-- 监控 -->
<!-- <module>app-monitoring</module> -->
</modules>
<parent>
<groupId>com.leaf</groupId>
<artifactId>leaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
2.maven插件
2.1maven生命周期
- Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
- Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
· validate
· generate-sources
· process-sources
· generate-resources
· process-resources 复制并处理资源文件,至目标目录,准备打包。
· compile 编译项目的源代码。
· process-classes
· generate-test-sources
· process-test-sources
· generate-test-resources
· process-test-resources 复制并处理资源文件,至目标测试目录。
· test-compile 编译测试源代码。
· process-test-classes
· test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
· prepare-package
· package 接受编译好的代码,打包成可发布的格式,如 JAR 。
· pre-integration-test
· integration-test
· post-integration-test
· verify
· install 将包安装至本地仓库,以让其它项目依赖。
· deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
- Site Lifecycle 生成项目报告,站点,发布站点。
2.2内置插件
maven内置插件2.3运行插件原理
mvn clean install
①执行maven-clean-plugin的clean目标,clean目标绑定的生命周期是clean,阶段是clean。
②执行maven-install-plugin的install目标,install目标绑定的生命周期是default,阶段是install,因此在此之前,需要完成在default生命周期install这个phase之前的目标。
2.4自定义插件
自定义mojo,需要继承AbstactMojo
3.setting.xml解析
3.1maven仓库
-
中央仓库
中央仓库在国外,所以拉取速度很慢,一般设置镜像仓库,加速依赖下载
-
镜像仓库
使用阿里云镜像仓库或者nexus搭建的私人仓库
-
私人仓库
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://dev2:8081/nexus/content/groups/public</url>
<!-- <url>http://dev2:8081/nexus/content/repositories/central/</url> -->
</mirror>
</mirrors>
3.2 maven依赖更新策略
snapshot为不稳定版本,在每次maven构建时,都要重新拉取,设置updatePolicy
<repository>
<id>internal</id>
<url>http://internal</url>
<releases>
<enabled>true</enabled></releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
4. maven指令常见参数
-U 更新snapshot版本的依赖
-e 出错时,打印异常栈
网友评论