maven

作者: 叙忆 | 来源:发表于2017-12-21 10:27 被阅读0次

    1.为何需要maven

    确定框架之后,会去对应官网下载对应的jar,有可能出现以下问题
    • jar包冲突
    • jar臃肿(会下载很多相关jar,无法确认哪一些无用)
    • 如何进行高效的测试
    maven就可以解决以上问题

    2.maven是什么

    管理项目的构建,报告,文档的软件项目管理工具,基于POM(project object Model)项目对象模型

    3.maven环境变量搭建

    • 下载http://maven.apache.org/download.cgi
    • 这里使用 Binary zip archive 3.5.2
    • 解压
    • 根据版本,有对java环境的要求
    • 环境变量添加M2_HOME: (F:\hadoop\apache-maven-3.5.2)
    • 将M2_HOME添加到path末尾中%M2_HOME%\bin
    • 验证,cmd中输入命令mvn -v


    4.maven解压目录

    • bin:包含了maven运行脚本
    • boot:类加载框架,maven使用此加载自己类库
    • conf:配置文件信息
    • lib:包含maven运行时所需的java类库

    5.maven 目录结构

    mvn help:system ->
    打印出所有的系统属性和环境变量

    maven创建的java项目常用的目录结构简单介绍:
    src
       --main
        --java
         --package
        --resource
       --test
        --java
         --package
        --resource
    pom.xml

    main/java项目源代码所在目录
    main/resources项目资源文件所在目录
    test/java测试目录
    test/resource 测试相关资源文件目录
    pom.xml项目工程的描述文件

    6.maven hello world

    • 创建文件夹F:\hadoop\maven01\src\main\java\com\zhang\maven\helloworld
    • 新建Helloworld.java
    package com.zhang.maven.helloworld;
    public class HelloWorld{
        public String sayHello(){
         return "hello maven";
        }
    }
    
    • 新建测试文件,文件目录一定要对
    • 新建F:\hadoop\maven01\src\test\java\com\zhang\maven\helloworld\HelloworldTest.java
    • 代码中的包名需要一致
    package com.zhang.maven.helloworld;
    import org.junit.*;
    
    public class HelloWorldTest{
        public void testHello(){
            Assert.assertEquals("hello maven",new HelloWorld().sayHello());
        }
    }
    
    • pom文件进行描述,与src同目录,一般看官网提供
    • 在maven的lib中解压jar查看xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <project>
    <!--指定当前pom版本-->
      <modelVersion>4.0.0</modelVersion>
      
      <!--项目包名:公司地址名称反写+项目名称-->
      <groupId>com.zhang.maven</groupId>
      
      <!--项目模块名称:一般为  项目名-模块名-->
      <artifactId>maven-demo1</artifactId>
      
      <!--
       第一个数字:   大版本号
       第二个数字:   分支版本号
       第三个数字:   小版本号
       
       SNAPSHOT:快照
       Release: 发布版本
       Alpha: 内部测试版本
       GA;正式发布版本
      -->
      <version>1.0.0SNAPSHOT</version>
    </project>
    
    • 进入到项目pom当前目录编译下



    7.常用命令

    • mvn -v 或mvn -version 验证环境变量
    • mvn help:system :打印出所有的系统属性和环境变量
    • mvn compile : 编译项目源码,不包括测试代码,会产生Target文件
    • mvn test:测试
    • 错误原因: junit没有依赖,在pom.xml中添加<dependencies>
      <!--
      在maven 中,任何一个依赖,插件以及项目构建输出都是通过坐标唯一标示
      maven中的坐标
        1.groupId
        2.artifactId
        3.version
        4.packaging
        5.classifer
      -->
      <dependencies>
         <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         </dependency>
      </dependencies>
    
    • 然后编译mvn test
    • mvn test -compile编译+测试
    • mvn clean 删除target文件

    8.maven默认下载地址

    mvn compile会去下载所依赖的jar包
    https://repo.maven.apache.org/maven2/junit/junit/xxx
    地址是在


    F:\hadoop\apache-maven-3.5.2\lib\maven-model-builder-3.5.2\org\apache\maven\model\pom-4.0.0.xml中的
    <url>https://repo.maven.apache.org/maven2</url>
     <repositories>
        <repository>
          <id>central</id>
          <!--仓库名称-->
          <name>Central Repository</name>
          <!--链接地址-->
          <url>https://repo.maven.apache.org/maven2</url>
          <!--默认路径-->
          <layout>default</layout>
          <!--禁止下载-->
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
    
    maven提供的中央仓库,下载流程

    1.本地仓库查找是否有对应的jar
    2.没有就去默认maven仓库下载

    本地仓库

    配置F:\hadoop\apache-maven-3.5.2\conf\setting.xml

    maven镜像仓库:
    maven的中央远程仓库是在国外,进行屏蔽,因此国内的将下载的jar提供给大家下载
    需要在settings.xml中的mirror标签中进行配置
    url改成配置镜像地址

     <mirror>
          <id>mirrorId</id>
          <mirrorOf>repositoryId</mirrorOf>
          <name>Human Readable Name for this Mirror.</name>
          <url>http://my.repository.com/repo/path</url>
    </mirror>
    

    NOTE:
    maven settings.xml 不要去修改maven安装目录下的conf/settings.xml(全局),建议拷贝到对应的本地仓库目录下面
    (C:\Users\zhanghua.m2\settings.xml)

    7.常用命令

    分模块编写
    新建一个maven02 helloMaven,然后maven02要引用maven01的helloWorld

    package com.zhang.maven.hellomaven;
    
    //引用helloworld
    import com.zhang.maven.helloworld.HelloWorld;
    public class HelloMaven{
        
        public String sayMaven(){
         return new HelloWorld().sayHello();
        }
        
    }
    

    解决方法
    1.将引用的jar添加到本地仓库( mvn install)

    2.将jar包的依赖添加到pom.xml
    3.如何查看本地仓库
    根据坐标
    groupId+artifactId

      <!--项目包名:公司地址名称反写+项目名称-->
      <groupId>com.zhang.maven</groupId>
      
      <!--项目模块名称:一般为  项目名-模块名-->
      <artifactId>maven-demo1</artifactId>
    

    在本地仓库中找到了

    三命令联合mvn clean compile install

    9.生成maven骨架结构,使用插件archetype

    mvn archetype:generate

    生成的目录
    一次生成
    F:\hadoop\maven04>
    mvn archetype:generate -DgroupId=com.zhang.maven04 -DartifactId=maven-demo04 -Dversion=1.0-SHNAPSHOT -Dpackage=com.zhang.maven04

    archetype大概有

    1.simple start
    2.webapp
    3.quickstart
    4.Groovy basic
    这里使用IDEA进行编码,创建项目


    10.maven依赖范围:

    三种classPath: 编译 ,测试,运行
    http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
    例如
    compile :编译依赖,三种范围都支持
    test:测试依赖范围有效,编译,运行范围无效,例如junit
    provided : 对编译,测试有效,运行时无效,例如serlvet api
    runtime:运行时依赖,对测试和运行,编译代码无效,例如JDBC
    system:系统依赖

    11.maven生命周期

    1.clean生命周期
    2.default生命周期
    3.site生命周期

    相关文章

      网友评论

          本文标题:maven

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