差不多两月前,写了《软件起步之第一个maven项目》和《maven项目手动创建》,但一上来就弄项目,对一些基本点还是很生疏,也没有实质性的进展,经过这段时间突击java ,虽然说不能全记住,但也能稍稍感到一些进步,趁热打铁,深入了解下maven.
1、maven有什么用?
专门为Java项目打造的管理和构建工具,它的主要功能有:
- 提供了一套标准化的项目结构;
- 提供了一套标准化的构建流程(编译,测试,打包,发布……);
- 提供了一套依赖管理机制。在pom.xml中使用
<dependency>
声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中。
2、为啥会有依赖问题?
使用框架开发,就会有大量的第三方的jar包,如果都是靠手动去官方网站上下载,太费劲了!而且出错的概率很大,需要花大量的时间去研究包之间的依赖关系,要读大量的资料。这就会有依赖问题。
3、maven如何解决依赖问题?
maven定义的几种依赖关系:
scope | 说明 | 示例 |
---|---|---|
compile | 编译时需要用到该jar包(默认) | commons-logging |
test | 编译Test时需要用到该jar包 | junit |
runtime | 编译时不需要,但运行时需要用到 | mysql |
provided | 编译时需要用到,但运行时由JDK或某个服务器提供 | servlet-api |
定义的这些依赖关系都会在pom.xml文件中<dependencies>中写明。根据定义的依赖关系类型,maven就会自动下载第三方的jar包,如何实现的呢?
Maven维护了一个中央仓库(repo1.maven.org),所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地。Maven并不会每次都从中央仓库下载jar包。一个jar包一旦被下载过,就会被Maven自动缓存在本地目录(用户主目录的.m2
目录),所以,除了第一次编译时因为下载需要时间会比较慢,后续过程因为有本地缓存,并不会重复下载相同的jar包。
4、除中央仓外,中国的镜像仓?
如果访问Maven的中央仓库非常慢,我们可以选择一个速度较快的Maven的镜像仓库。Maven镜像仓库定期从中央仓库同步:这块《软件起步之第一个maven项目》中配置成阿里的镜像仓中
5、如果只知道引用的第三方组件名,如何确切知道它的groupId
、artifactId
和version
?
在https://mvnrepository.com/上输入组件的名字,可以看到: