Maven
无论使用IDEA还是Eclipse等IDE,都要使用ANT工具,ANT工具帮助编译代码和打包运行的工作
Apache基于ANT进行了升级,研发出全新的自动化构建工具maven
maven 项目管理工具
maven使用项目对象模型(pom-project Object Model)的概念
maven认为一个项目 必须要有一个项目的描述(所依赖的jar,版本,父项目等)pom.xml文件
跟前端的 npm项目差不多,每一个npm项目都有一个package.json作为一个项目的描述文件
那么maven就是通过这个文件pom.xml自动构建项目的
既然使用项目对象模型,那么每个项目就是一个对象,那么对象之间的联系就有 继承,依赖,聚合
既然项目之间可以有这么一层关系,我就可以模块化的拆分,模块之间更快的相互使用
maven对于java项目,jar的引用可以通过坐标的方式,来定位其他的项目
maven仓库
maven是通过坐标来找jar包的,那么这些jar包里面会有一个pom.xml文件,提供了这个坐标
但是jar包肯定要在某一个地方,让maven去找,不可能 满世界的找一遍,
而是给定一个maven仓库,maven只要知道这个仓库地址就好
仓库就分远程仓库(可以搭一个私服仓库或者用apache的)和本地仓库
本地有不去远程找,这个maven找jar的方式
maven去远程找的jar包会在本地存一份,二级缓存
当然也有下载失败的情况
这里给出一个clean.bat的文件,能够把下载失败的依赖包清空
1 | set REPOSITORY_PATH=F:\maven\repository |
坐标
1 | <groupId>io.springfox</groupId> 组id,没指定默认继承父工程组id |
安装:
http://maven.apache.org/download.cgi
下载二进制压缩版文件,
解压就可以用了
1 | cd apache-maven-3.6.1 |
目录结构
bin 命令的执行文件
boot maven启动需要的jar包
conf 配置文件,里面有一个settings.xml的配置文件
settings.xml是一个全局配置文件,核心配置文件
mvn要在cmd终端使用 ,需要配置环境变量,把mvn命令所在bin 目录配置到path环境变量
Settings
1 |
|
一个项目的pom局部配置,需要使用编译器插件
1 | <properties> |
maven分三种工程
pom工程:pom工程是逻辑工程,用在父级工程或者聚合工程中,用来做jar包的版本控制
jar工程:将会打包成jar,用作jar包使用,及常见的本地工程java project
war工程:将会打包成war,发布到服务器上的工程
maven项目的目录结构
带有一点模块化的思想
src 下有main和test
mian下面的文件,以后都会编译输出到一个target目录的classes文件夹下面
java java代码文件
resource 配置或者资源文件
test文件,用来做测试
target 放编译后的内容
maven项目编译运行后会生成一个jar包放到本地仓库
依赖
依赖冲突:maven默认会按低版本依赖来,注意了
依赖传递: a依赖b,b依赖c ,那么a就依赖b和c,maven自动处理
两个原则:最短优先 a->b->c->d(2.0),a->e->d(1.0),那么a使用的是d(1.0)
最先声明原则,路径长度相同,那么 依赖标签里面,谁位置在上就谁
排除
1 |
|
依赖范围
1 | <dependency> |
父子工程
1 | 父工程 |
聚合
其实就是一父多子工程
模块化的概念
意思就是一个项目是在太大, 把业务按模块来划分,每个模块都可以独立运行,那么意味着可以分开来开发,不用到一个项目中开发,最后聚合起来变成一个大的系统
那还是的有一个总的大项目,也就是父项目,但是父项目只做子项目的管理,而不做 功能实现
在父项目的pom文件 里面所有的 子项目信息被包含在 modules标签里面,这样有一个好处,模块之间还是可以互相依赖使用
1 | 定义父项目为 pom 项目 |
插件:
资源配置插件
想把非resources下面的文件打包到classes下面
需要配置
1 |
|
tomcat插件:
1 |
|
命令:
mvn help:system会在电脑c盘 当前用户目录的 生成.m2/repository ,然后把配置好的settings.xml文件复制到 .m2目录下
mvn clean 清除已编译的信息,删除工程中的target目录
mvn install: 本地安装, 包含打包,编译,安装到本地仓库
-javac 编译
-jar 打包
cp 安装到本地仓库,其实就是移动jar包
mvn compile :只编译 java编译成class文件
-javac命令
package:打包,包含编译 但是不会放到本地仓库
deploy :把当前打包好的jar 放到本地仓库
- 本文作者: 忘忧症
- 本文链接: https://NepenthesZGW.github.io/2020/06/16/项目管理/maven/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!