maven

Posted xue_yun_xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven相关的知识,希望对你有一定的参考价值。

一、概述

Maven这个单词来自于意第绪语(犹太语),意为知识的积累.
Maven:
1.帮助我们管理jar依赖(依赖,jar版本的管理)
2.帮助我们构建工程(打jar,打war)
编译,测试,打包,部署

二、maven 安装

1、下载

https://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz

2、解压

在这里插入图片描述

3、配置环境变量

配置MAVEN_HOME

在这里插入图片描述

配置Path

在这里插入图片描述

测试maven

C:\\Users\\wgz>mvn -v

在这里插入图片描述

三、仓库

仓库:用来存储物品的地方

maven仓库:作用就是存储不同类型,不同版本的jar

本地仓库:就是jar 存储在本地磁盘

远程仓库:存储在其他服务器上

中央仓库:maven 的根仓库(公共的jar)
公共仓库:(镜像仓库): 镜像仓库就是国内 中央仓库的副 本,主要为了提高响应速度
私服:(私有的仓库服务器):公司内部共享的jar(不对外部开发), 解决外网无法访问问题,提高下载速度
在这里插入图片描述
在这里插入图片描述

本地仓库

在这里插入图片描述
在这里插入图片描述

中央仓库

存储了所有的公共的jar
https://mvnrepository.com/artifact/com.alibaba/druid

在这里插入图片描述

镜像仓库

为了提交响应速度,可以配置阿里云镜像
阿里云镜像
https://maven.aliyun.com/mvn/guide
网易云镜像
seetting.xml

在< mirrors>标签中配置:

  <mirrors>
		<mirror>
			<id>aliyun</id>  
			<!-- 中心仓库的 mirror(镜像) -->
			<mirrorOf>central</mirrorOf>    
			<name>Nexus aliyun</name>
			<!-- aliyun仓库地址 以后所有要指向中心仓库的请求,都会指向aliyun仓库-->
			<url>http://maven.aliyun.com/nexus/content/groups/public</url>  
		</mirror>
  </mirrors>

私服仓库

配置自己的私服地址
在servers 标签中配置

四、idea 中自带的maven

1,自己安装的 maven
2 两个idea 自带的maven

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如果使用idea自带maven3 ,则配置的settings.xml 必须是maven3中的配置,否则配置的镜像仓库,无法生效

五、idea创建java 工程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、如何引入依赖?

1、搜索

在这里插入图片描述

2、导入依赖


    <!--
        当前工程所有的依赖都应该放到 dependencise标签

          <dependencies> 要放在坐标之后
    -->
    <dependencies>
        <!--  mysql  -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.20</version>
        </dependency>


    </dependencies>

在这里插入图片描述

七、常见bug

maven 由于网络原因(网速慢,掉线)引入下载jar失败

在这里插入图片描述

解决方案

1、 删除 lastUpdate

在这里插入图片描述

2、 重新导入依赖

在这里插入图片描述

3、假如导入之后依然无法导入,再次搜索lastupdate 又生成了,再次删除lastupdate 电脑切换为手机网络,再次尝试可能解决完了,jar包导入依然爆红,但是不影响使用,此时可以重启idea解决报红问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、idea 创建 web工程

1、创建工程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、配置依赖

jsp.jar
servlet.jar
jstl.jar

  <dependencies>
     <!--
        单元测试的包
     -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>


    <dependency>
      <!-- jstl 支持 -->
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!--
       servlet jar
    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>


    <!--
        jsp jar
    -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

3、配置tomcat在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4、创建 java resources 文件夹

在这里插入图片描述

5、创建servlet

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.getWriter().write("hello world");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
    }
}

6、测试

在这里插入图片描述

九、maven 打包类型

打包类型三种
war web 包
jar 普通jar 默认打包方式
pom 在父工程 配置打包类型为pom ,父工程在构建时,触发子工程构建

<!-- 打包类型   -->
  <packaging>war</packaging>
<packaging>jar</packaging>
<packaging>pom</packaging>

十、依赖生命周期

依赖生命周期:jar包的存活时间,使用scope 标签配置

<scope>compile</scope>
标识周期
compile缺省值,适用于所有阶段(测试运行,编译,运行,打包)
provided类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api.jar;适用于(测试运行,编译)阶段
runtime只在运行时使用,如 mysql的驱动jar,适用于(运行,测试运行)阶段
test只在测试时使用,适用于(编译,测试运行)阶段,如 junit.jar
systemMaven不会在仓库中查找对应依赖,在本地磁盘目录中查找;适用于(编译,测试运行,运行)阶段

compile :全阶段都需要该jar
provided: 编译的时候,测试时候需要,运行时,打包时,不需要 servlet-api.jar
runtime:运行时,打包时,测试 需要,编译时不需要,mysql的驱动jar
test:测试时需要,运行时不需要,打包时不会打进去

  <dependencies>
     <!--
        单元测试的包
     -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>

      <!-- 只有在测试时 需要,打包不会打入war-->
      <scope>test</scope>
    </dependency>


    <dependency>
      <!-- jstl 支持 -->
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      <!--  任何阶段都需要jar-->
      <scope>compile</scope>
    </dependency>

    <!--
       servlet jar
    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <!--  编译时需要, 打包不会打进入war-->
      <scope>provided</scope>
    </dependency>


    <!--
        jsp jar
    -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>


    <!--  mysql  -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.22</version>
      <!-- 运行时需要,编译可以没有,打包时,会打进入 war-->
      <scope>runtime</scope>
    </dependency>


  </dependencies>

十一、maven 构建的生命周期

Maven 有以下三个标准的生命周期:
clean:项目清理的处理 ********
default(或 build):项目部署的处理 *****
site:项目站点文档创建的处理

1、clean

就是清空target目录
1.手动删除target
2.双击 idean 右侧面板 clean
在这里插入图片描述
3在命令行输入

mvn clean

在这里插入图片描述

2、default(或 build)

build构建 ----》生成jar

在这里插入图片描述

阶段处理描述
验证 validate验证项目验证项目是否正确且所有必须信息是可用的
编译 compile执行编译源代码编译在此阶段完成
测试 Test测试使用适当的单元测试框架(例如JUnit)运行测试。
包装 package打包创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify检查对集成测试的结果进行检查,以保证质量达标
安装 install安装安装打包的项目到本地仓库,以供其他项目使用
部署 deploy部署拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

在这里插入图片描述

十二、单元测试

使用junit 完成单元测试

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * 使用junit 单元测试 使用Test开头
 *   1.引入
 *           <dependency>
 *             <groupId>junit</groupId>
 *             <artifactId>junit</artifactId>
 *             <version>4.11</version>
 *
 *             <!-- 只有在测试时 需要,打包不会打入war-->
 *             <scope>test</scope>
 *         </dependency>
 *   2.在test 目录创建文件
 *   3.写测试类
 *          所有方法 必须 是 public void
 */
public class Test1 {

    private String str = null;

    @Before // 在 @Test 之前执行
    public void init(){

        str = "高原";
        System.out.println("初始化资源");
    }

    @Test
    public void  hi(){
        System.out.println(" hi-str:"+str);
    }

    @Test
    public void  say(){
        System.out.println("say-str:"+str);
    }

    @After // 在 @Test 执行完毕后调用
    public void destroy(){
        System.out.println("释放资源");
    }

}

在这里插入图片描述

以上是关于maven的主要内容,如果未能解决你的问题,请参考以下文章

Spring+SpringMVC+MyBatis+Maven框架整合

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

如何在 Apache Felix maven-bundle-plugin 中设置 Provide-Capability 标头?

Maven FTP部署:无法创建目录

如何从詹金斯访问maven属性?

向小军 “小黑” 正式加入 Maven Skateboards