什么是maven?
maven是一种java构建工具。
1)管理jar资源:自然还能够管理jar与jar之间的引用逻辑和jar资源的使用场景,比如jar是编译时使用还是测试时、运行时使用,可以定义jar的依赖范围,是不是强制性依赖。
2)项目管理:maven可以决定你的项目目录结构,解决哪些文件是源码、哪些是如properties、xml、yml一类的资源文件等等。
3)插件:maven的其他能力全部体现在插件方面,maven提供的插件有几十种,最常见的如编译插件、打包插件、注释插件等等。
管理jar资源
1、maven是如何根据我们的配置找到JAR的(基本原理)
当我们在pom文件中声明我们项目依赖的jar资源后,maven默认会首先查找我们计算机本地的repository(可以自定义其他名字)文件夹,repository内部存放jar资源的目录结构非常简单,是与我们声明的groupId和artifactId有关,举例说明:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!-- <scope>provided</scope> -->
<type>引入的文件类型是pom</type>
<scope>生效作用域import导入阶段</scope>
</dependency>
groupId事实上就是存储在资源库repository文件夹内的包路径,
artifactId是资源库repository文件夹内这个jar文件各个版本共同存储的所在文件夹名字。Version对应资源库repository文件夹内这个jar最终存储在的文件夹的文件夹名字。
备注:最终我们引用的jar包就会在我们找到的这个文件夹内,除了jar包以外,还会包含一个> 同名的POM文件,这个POM文件是为了让我们的项目引用这个jar资源时,去查找这个jar包
的jar包依赖。
2、本地仓库没有jar包怎么办?
那么如果我们的资源库repository文件夹内并不包含我们所声明的jar包,这种情况下maven会根据我们pom文件中声明的资源库,按从上至下的顺序一个一个的到第三方资源库去查找。
<repositories>
<repository>
<id>远程仓库唯一标识符</id>
<layout>用于描述资源库的布局类型的</layout>
<url>远程仓库的url</url>
<snapshots>
是否能够引用快照版本。maven资源库分为快照版本和正式版本,快照版只还正在维 护的版本,可能存在问题的,正式版本则是完整的正式发布的版本。False时这个资源库里的快照版本jar我们将无法使用,正式版本同理。
</snapshots>
<releases>是否能够引用正式版本</releases>
</repository>
</repositories>
3、什么是jar冲突?
Jar冲突是指A引用C,B也引用C,但是他们引用的C版本不相同
1)出现JAR版本冲突了怎么办?
<dependency>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>
项目管理
1、自定义资源位置。
<build>
.......
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
......
</build>
Directory:相对于项目根目录的相对路径
Includes:包含哪些文件,可是使用通配符
Excludes:排除哪些文件,可使用通配符
targetPath:编译时编译到哪些目录下
2、maven项目的父子关系
pom文件与pom文件之间是可以定义上下级关系的,它自然也决定着我们多项目时的项目之间的关系。
1)父pom文件
20180719142407739.png2018071914241645.png
我们发现父级pom文件与普通pom文件没有太多区别,仅仅多了一个modules模块,这里生命的model就是子pom文件的artifactId属性。
2)子pom文件
20180719142422278.png我们也能够发现子pom文件相比正常的pom文件多了parent配置,parent中的配置就是对应的父级pom文件。这样maven项目的父子关系就建立了。
网友评论