maven理解

2019-05-05  本文已影响0人  提笔忘字_波

特别细

什么是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.png
2018071914241645.png

我们发现父级pom文件与普通pom文件没有太多区别,仅仅多了一个modules模块,这里生命的model就是子pom文件的artifactId属性。

2)子pom文件

20180719142422278.png

我们也能够发现子pom文件相比正常的pom文件多了parent配置,parent中的配置就是对应的父级pom文件。这样maven项目的父子关系就建立了。

https://blog.csdn.net/mydeathtrial/article/details/81114634

上一篇下一篇

猜你喜欢

热点阅读