美文网首页
maven理解

maven理解

作者: 提笔忘字_波 | 来源:发表于2019-05-05 10:36 被阅读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

    相关文章

      网友评论

          本文标题:maven理解

          本文链接:https://www.haomeiwen.com/subject/dcfcoqtx.html