Maven总结

2017-11-12  本文已影响9人  icecrea

Maven是基于项目对象模型pom,通过一小段信息来管理项目的构建、报告和文档的项目软件管理工具。

maven目录结构如下:
bin包含mvn的运行脚本
boot目录包含一个类加载器的框架
conf是配置文件
lib是类库


配置环境变量



path环境变量里新增%MAVEN_HOME%\bin


检验安装成功


groupId:项目包名
artifactId:模块名
version:版本 (0.0.1-SNAPSHOT)

maven项目结构如下表示:


按照该项目结构不用编译器手动搭建一个maven项目
注意version格式为:*-SNAPSHOT不然报错

mvn compile :编译。如果第一次会下载很多jar 编译生成target文件



mvn test: 运行测试文件
mvn package:打包成jar


mvn clean 删除target文件(里面包含编译生成的字节码文件和测试报告)
install 安装jar包到本地仓库中

maven提供了archetype插件,用于创建符合maven规定的目录骨架。
mvn archetype


image.png

maven compile 生成classes文件
maven test 生成test-classes文件
install jar包部署到本地仓库
依赖树mvn dependency:tree
打包时候过滤test: mvn clean package- Pdev -Dmaven.test.skip=true
mvn help:effective-pom 查看父pom
maven生命周期: 预定义
clean lifcycle
default lifecycle
site lifecycle

clean lifecycle: Pre-clean,Clean,Post-clean. 执行某个指令时,也会执行之前的指令。避免重复。(mvn pre-clean,mvn clean,mvn post-clean)

default lifcycle: 1.pre-resouces 2.compile 3.test-compile 4.test 5.package 6.install 7.deploy
mvn process-resouces 资源准备:复制资源到target目录下
mvn test-compile 跳过源代码只编译test文件
mvn test

maven是使用surefire插件执行测试的,它按照指定格式的类名来查找匹配的测试类,
默认包含的测试类:
**/*Test.java
**/Test*.java
**/*TestCase.java
默认排除的测试类:
**/Abstract*Test.java
**/Abstract*TestCase.java

mvn package
mvn install 我的部署到/home/icecrea/.m2/repository/com/qunar/mavendemo/1.0-SNAPSHOT/mavendemo-1.0-SNAPSHOT.pom

site lifecycle:pre-site site post-site site-deploy

项目打包名称:finalname
选择相应环境 : profie

仓库的布局:根据依赖的坐标进行管理。groupId/artifactId/version/artifactId-version.packing
比如我的项目打包后在 ~/.m2/repository/com/qunar/mavendemo/1.0-SNAPSHOT/mavendemo-1.0-SNAPSHOT.jar 就是组名/项目名/版本/对应jar包 可以供别的项目引用
不稳定版本snapshot 稳定版本 release
依赖:
type:默认为jar
scope:依赖范围
compile:默认
test:测试依赖范围 不会打包
provided:已提供依赖范围
runtime:运行时依赖范围 
optional:依赖是否可选
exclusions:排除传递依赖
依赖特性:
1.路经优先 2.声明优先:路经长度相同,谁先声明加载谁。
解决:1.使用<dependencyManagement> 2.<exclusions><exclusion><artifactId><groupId>排除该依赖
依赖归类:归类到properties
聚合:使用一个命令构建多个模块
1.把父工程的package改成pom<packing>
2.把子工程的module元素引入<modules><module>
继承:
<parent>
项目可以不指定groupid和version,自动继承父工程的。不能不指定artifactid

上一篇下一篇

猜你喜欢

热点阅读