Maven入门教程

2018-11-02  本文已影响58人  YukunWen

引言

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私服。具体的搭建方法百度一下就有很多了。

上一篇下一篇

猜你喜欢

热点阅读