名词解释
自动化构建工具:将原材料(java、js、CSS、html、图片)-》产品(可发布项目)
仓库:有本地仓库,远程仓库(中央仓库镜像,私服nexus)需要什么jar包可以直接下载
中央仓库镜像:对中央仓库的分流作用,减少中央仓库压力
maven的作用
1.管理jar包
2.将项目拆分成若干个模块
maven的概念
是一个基于java平台的自动化构建工具
发展历史:make-ant-maven-gradle
清理:清空编译的结果(删除class文件,准备重新编译)
编译:java-class
测试:对项目中的关键点进行测试,可以用项目中的测试代码去测试开发代码
报告:将测试的结果进行显示
打包:将项目中包含的多个文件压缩成一个文件用于压缩或部署
安装:将打成的包放到本地仓库,共七天项目使用
部署:将打成的包放到服务器上,准备运行
通常需要下载一个jar包时,先从本地仓库下载,如果本地仓库不存在,再从中央仓库(镜像)中下载
maven配置
maven目录
maven
-src
--main(程序功能代码)
-java(java代码)
-resources(配置,资源代码)
--test(测试代码)
-java
-resource
pom.xml(项目有对象模型)
target 目录里是对java的编译结果的存放
maven pom.xml 配置详解
<groupId>域名翻转。大项目名称</groupId>
<artifactId>子模块名</artifactId>
<version>版本名称</version>
<!--dependencies 类用来解决jar包依赖问题,在pom.xml里配置-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
maven常用命令
执行目录:pom.xml所在的目录
在cmd里先到项目的pom.xml中,或者在当前目录的目录指引除,输入cmd回车
mvn compile:编译,从中央仓库中下载jar包,编译java文件,将所缺少的jar包,按照pom.xml中的配置去本地仓库查找,或者中央仓库下载
mvn test:执行测试程序
mvn package:打包,打成jar/war包
mvn install:将开发的模块放到本地仓库,供其他模块使用
依赖
依赖的有效性
maven在编译、测试、运行时,各自有一套classpath(scope的值)
compile | test | provided | |
---|---|---|---|
编译 | √ | × | √ |
测试程序(test) | √ | √ | √ |
部署(运行) | √ | × | × |
依赖的排除
如果a包依赖域b包,当用maven引入a包时,会自动引入b包
依赖其他项目时
使用dependency模块,将另一个项目的坐标(groupid,artifactId,version)写入即可
依赖的传递性
如果a项目依赖于b项目,b项目包依赖于c包,如果希望a项目下载的时候能直接下载到c包,那么b包对c包的依赖dependency的scope的值要为compile
依赖的原则
最短路径优先:如果依赖于同一个包,版本不同,那么路径最短的先被选择
如果路径相同的话,在同一个pom.xml中后面的依赖会覆盖前面的jar包而被选择,所以严禁在一个项目中选择两个版本的jar包
如果路径相同的话,在不同pom.xml中前面jar包会优先被选择,所以严禁在一个项目中选择两个版本的jar包
创建maven工程
eclipse:new->maven project
配置maven:
window-》peference->installations(用自带或自己安装的maven)
-》usersetting 选setting的文件位置,让程序去读setting文件
配置pom.xml
配置依赖,配置完成后,eclipse,在项目上右键->maven->update project
执行
在pom.xml右键->run as -》test/clean/install/compile
maven生命周期
clean lifecycle:清理
default lifecycle:默认
site lifecycle:站点
查找maven 的dependency代码



maven继承
如果a继承b,那么a继承b的所有依赖
打包方式
java-->jar包
web-->war包
父工程-->pom包
依赖的写法
父工程的dependency的写法:在之前的dependencies的依赖再加一层:<dependencyManagement></dependencyManagement>
子工程:
在pom.xml中:
1.加入父工程的坐标,(自己的坐标,如果有相同的可以不写,一般只需要写)
2.当前工程的pom.xml到父工程的pom.xml的相对路径
3.在子类中声明需要用到哪些依赖
<parent>
<groupId>域名翻转。大项目名称</groupId>
<artifactId>子模块名</artifactId>
<version>版本名称</version>
<relativePath>pom.xml到父工程的pom.xml的相对路径</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependencies>
maven的聚合
maven项目能识别的;1.本项目包含的,2:本地仓库中的
如果maven1需要调用maven2的一些东西,需要先install maven2,这种情况下可以用聚合
聚合(只能在打包方式为pom的方式中使用):
1.创建一个总工程
2.配置pom.xml
<moudles>
<!--项目根目录,可以不用关注顺序,自动会排查依赖-->
<moulde>../maven2</moudle>
<moudle>../maven1</moudle>
</moudles>
部署web工程
<build>
<finalName>shterm-api</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
网友评论