美文网首页
Maven入门教程

Maven入门教程

作者: YukunWen | 来源:发表于2018-11-02 16:50 被阅读58次

    引言

    maven是一个项目管理工具,由最初的ant进化而来。虽然目前最新的是gradle,但是maven还是流串于各大公司的代码中(如springboot的源码管理)。因此,对于初学者来说,学会使用使用maven是对于后期成长非常有帮助的。
    这里推荐慕课网上的maven基础课程,有空的同学一定去学一学,能够查缺补漏(https://www.imooc.com/learn/443

    项目基本架构

    maven推崇的是约定大于配置,利用maven搭建的项目一定是如下的结构:


    图1.代码结构图
    * src
      * main
        * java
          * com.xxx(java代码)
        * resources 
          * xxx(资源文件)
      * test
        * javaxx (java测试代码)
    * pom.xml
    
    pom文件的基本介绍
    <?xml version="1.0" encoding="UTF-8"?>
    <!--project是pom的根元素-->
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!--指定当前pom的版本-->
        <modelVersion>4.0.0</modelVersion>
    
        <!--这里写包名,一般为公司网址的反写+项目名-->
        <groupId>com.yuxun.fantuan</groupId>
        <!--这里写模块名,一般为项目名-模块名-->
        <artifactId>fantuan-parent</artifactId>
        <!--这里写版本-->
        <!--第一位大版本,第二位分支版本,第三位小版本
        snapshot快照
        alpha内部测试
        beta公测
        release稳定
        ga正式发布
        -->
        <version>2.6.0-SNAPSHOT</version>
        <!--默认是jar,也可以是
        war
        zip
        pom,是打包多module模式下,多个模块一起打包用的-->
        <packaging>pom</packaging>
        <!--项目描述名 -->
        <name></name>
        <!--项目地址 -->
        <url></url>
        <!--项目描述 -->
        <description></description>
        <developers></developers>
        <licenses></licenses>
        <organization></organization>
        <!--自定义一些属性标签,用的时候就是${juint.version}-->
        <properties>
            <junit.version>3.8.1</junit.version>
        </properties>
        <dependencies>
           <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.10</version>
           </dependency>
        </dependencies>
        <!-- 依赖的管理 -- >
        <!-- 抽象出来做成父类被继承的,写在里面的jar将不会被本模块依赖-->
        <dependencyManagement>
           <dependencies>
              <dependency>
              </dependency>
           </dependencies>
        </dependencyManagement>
    
        <build>
           <!-- 插件列表 -->
           <plugins>
              <plugin>
                 <groupId></groupId>
                 <artifactId></artifactId>
                 <version></version>
              </plugin>
           </plugins>
        </build>
        <!-- -->
        <parent></parent>
        <!-- -->
        <modules>
           <module></module>
        </modules>
    </project>
    

    其中groupId,artifactId,version三者称之为坐标

    maven常用的命令

    mvn -v 查看maven版本
    mvn compile 编译
    mvn test 测试
    mvn package 打包
    mvn clean 删除target
    mvn install 将代码打包成jar包到本地仓库中
    mvn archetype:generate 创建maven目录架构
    mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名
    -DartifactId=项目名-模块名
    -Dversion=版本号
    -Dpackage=代码所存在的包名

    maven配置文件的修改

    conf下面的setting文件里面的localRepository标签是存在jar包的位置
    mirrors标签是镜像地址

    maven依赖仲裁

    • maven依赖冲突——短路优先
      1.A -> B -> C -> X(jar)
      2.A -> D -> X(jar)
      优先选择路径短的,所以优先选择2
    • 相同路径的情况下,哪个dependency在前就是引用哪个。

    maven <dependencyManagement>和<dependencies>的区别

    参考网址:https://blog.csdn.net/liutengteng130/article/details/46991829
    同时阿里巴巴java开发手册里面有这么提到:

    8.【推荐】所有pom文件中的依赖声明放在<dependencies>语句块中,所有版本仲裁放在<dependencyManagement>语句块中。
    说明:<dependencyManagement>里只是声明版本,并不实现引入,因此子项目需要显式的声明依赖,version和scope都读取自父pom。而<dependencies>所有声明在主pom的<dependencies>里的依赖都会自动引入,并默认被所有的子项目继承。

    maven 的一些常见问题

    1.打包成pom文件和打包成jar文件,zip文件有什么区别呢?
    答:<type>pom</type>,pom文件打包最后就是pom文件,丢到私服上面就是pom文件。同时该模块下面的module又会进行相应的打包,根据他们的格式打包成相应的文件。
    2.mvn 的dependeny命令是做什么的?
    答:mvn clean dependency:copy-dependencies -DoutputDirectory=lib 把当前的pom文件中的依赖给下载下来。
    3.maven <executions>标签的作用?
    答:

    <build>
        <!-- 插件列表 -->
        <plugins>
           <plugin>
              <groupId>xx</groupId>
              <artifactId>jetty</artifactId>
              <version>xx</version>
              <executions>
                <execution>
                    <!-- 在打包成功后使用jetty:run来运行jetty的服务-->
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
          </plugin>
      </plugins>
    </build>
    

    4.maven私服是什么东西?
    答:maven我们都知道会去中央仓库去下载依赖到本地,这样就能引入到项目中。但是,我们自己的项目不一定会开源,上传到的地方不必要向所有人展示,所以要搭建自己的私人服务器。我们可以通过修改配置,先去私服上下载maven依赖,当从私服上找不到的时候就会去中央仓库中下载。一般使用nexus搭建maven私服。具体的搭建方法百度一下就有很多了。

    相关文章

      网友评论

          本文标题:Maven入门教程

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