Maven

1. Maven 的概念

Maven 是一个项目管理工具

2. Maven 的作用

  • Maven 可以自动导入 jar 包
  • Maven 可以编译代码
  • Maven 可以自动运行单元测试
  • Maven 可以打包项目,部署项目,生成 Web 站点

3. Maven 的依赖管理

Maven 的依赖管理就是 Maven 工程对 jar 包的管理过程

传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。

而在 Maven 开发的项目中,不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar 包的坐标,在需要用到 jar 包的时候,只要查找 pom.xml 文件,再通过 pom.xml 文件中的坐标,到一个专门用于存放 jar 包的仓库中根据坐标从而找到这些 jar 包,再把这些 jar 包拿去运行。

在这里插入图片描述

4. Maven 的安装

4.1 Maven 的下载

  1. 进入 Maven 官网

    https://maven.apache.org/

  2. 点击 Download

  3. 点击 Binary zip archive 后的 link 下载

4.2 Maven 的安装

直接解压到一个路径下即可

4.3 Maven 的目录结构

在这里插入图片描述

  • bin:存放了 maven 的命令

  • boot:存放了一些 maven 本身的引导程序,如类加载器等

  • conf:存放了 maven 的一些配置文件,如 setting.xml 文件

  • lib:存放了 maven 本身运行所需的一些 jar 包

4.4 Maven 的环境变量

变量名:Maven_HOME
变量值:D:\apache-maven-3.5.2
变量名:Path
变量值:%Maven_HOME%\bin

至此我们的 Maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

找开 cmd 命令,输入 mvn –v 命令,如果显示 Maven 和 Java 的版本信息,则配置成功。

5. Maven 仓库

在这里插入图片描述

5.1 Maven 仓库的分类

  • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找
  • 远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载
  • 中央仓库:在 Maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。

5.2 Maven 本地仓库的配置

  1. 将 “repository.rar” 解压至 D:\repository 目录下

  2. 在 MAVE_HOME/conf/settings.xml 文件中配置本地仓库位置

    <!-- localRepository
    | The path to the local repository maven will use to store artifacts.
    |
    | Default: ${user.home}/.m2/repository
    <localRepository>/path/to/local/repo</localRepository>
    -->
    <localRepository>D:\repository\maven_repository</localRepository>
    

6. Maven 项目标准目录结构

Maven 项目的目录结构如下:

在这里插入图片描述

进入 src 目录后,我们发现它里面的目录结构如下:

在这里插入图片描述

  • src/main/java —— 存放项目的.java 文件

  • src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件

  • src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类

  • src/test/resources —— 测试资源文件

  • target —— 项目输出位置,编译后的 class 文件会输出到此目录

  • pom.xml——maven 项目核心配置文件

注意:如果是普通的 java 项目,那么就没有 webapp 目录。

7. Maven 的常用命令

我们可以在 cmd 中通过一系列的 maven 命令来对我们的 maven 工程进行编译、测试、运行、打包、安装、部署。

打开命令提示符,输入以下命令,进入项目 :

cd maven项目路径

7.1 compile

mvn compile

compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下。

7.2 clean

mvn clean

clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

7.3 test

mvn test

test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。

7.4 package

mvn package

package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包。

7.5 install

mvn install

install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

8. Maven 的生命周期

在这里插入图片描述

maven 对项目构建过程分为三套相互独立的生命周期,这三套生命周期分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

  • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

  • Site Lifecycle 生成项目报告,站点,发布站点。

9. Maven 的概念模型

在这里插入图片描述

  • 项目对象模型 (Project Object Model)

    每个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、

    插件目标等。

  • 依赖管理系统(Dependency Management System)

    通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。

    比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9:

    <!-- 依赖关系 -->
    <dependencies>
    	<!-- 此项目运行使用 junit,所以此项目依赖 junit -->
    	<dependency>
    		<!-- junit 的项目名称 -->
    		<groupId>junit</groupId>
    		<!-- junit 的模块名称 -->
    		<artifactId>junit</artifactId>
    		<!-- junit 版本 -->
    		<version>4.9</version>
    		<!-- 依赖范围:单元测试时使用 junit -->
    		<scope>test</scope>
    	</dependency>
    </dependencies>
    
  • 一个项目生命周期(Project Lifecycle)

    使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些

    过程规范为一个生命周期

10. IDEA 集成 Maven 插件

10.1 IDEA 的 Maven 配置

  1. 打开 File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven

  2. 在 Maven home directory 后配置本地已经安装好的 Maven 目录

    D:\apache-maven-3.5.2
    
  3. 在 User setting files 后指定 settings 配置文件路径

    D:\apache-maven-3.5.2\conf\settings.xml
    
  4. 点击 Runner,在 VM Options 后配置,这样在创建相关组件模板时就只基于本地已有的组件来创建,不再因网络延时而导致异常

    -DarchetypeCatalog=internal
    

10.2 在 IDEA 中创建一个 Maven 的 Web 工程

  1. 打开 IDEA,选择 Create New Project

  2. 点击 Maven,勾选 Create from archetype

  3. 选择 idea 提供好的 maven 的 web 工程模板

    org.apache.maven.archetypes:maven-archetype-webapp
    
  4. 点击 Next,填写项目信息

    GroupId:com.zt  		//公司或组织的名称
    ArtifactId:maven_web	//项目名
    version:1.0-SNAPSHOT	//版本号
    
  5. 点击 Next,选择安装目录

  6. 点击 Finish

  7. 最终项目的目录结构还是不完整

    在这里插入图片描述

  8. 手动添加 src/main/java 目录,右键 main 文件夹 New Directory,创建一个新的文件夹命名为 java,在新的文件夹 java 上右键 Make Directory as Sources Root

    在这里插入图片描述

10.3 创建一个 Servlet

  1. 打开 mave_web 工程的 pom.xml 文件,添加坐标,导入 jar 包

    <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
    </dependency>
    
  2. src/java/main 创建了一个 Servlet

    package com.zt.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class ServletDemo1 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    }
    
    
  3. 在 web.xml 中配置路径

    <servlet>
    	<servlet-name>ServletDemo1</servlet-name>
    	<servlet-class>com.zt.servlet.ServletDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
    	<servlet-name>ServletDemo1</servlet-name>
    	<url-pattern>/ServletDemo1</url-pattern>
    </servlet-mapping>
    

10.4 坐标的来源方式

添加依赖需要指定依赖 jar 包的坐标,但是很多情况我们是不知道 jar 包的的坐标,可以通过如下方式查询:

  1. 进入网站

    https://mvnrepository.com/
    
  2. 搜索所需要的 jar 包

  3. 复制坐标即可

10.5 依赖范围

添加坐标时需要指定依赖范围,依赖范围包括:

  • compile:编译、测试、运行都有效。默认范围,可以不写。
  • provided:编译、测试、有效,运行时无效。防止和 tomcat 下 jar 冲突
  • runtime:测试、运行有效。JDBC 驱动 jar 包
  • test:测试有效。junit

10.6 添加 tomcat7 插件

在 pom 文件中添加如下内容:

<plugin>
 <groupId>org.apache.tomcat.maven</groupId>
 <artifactId>tomcat7-maven-plugin</artifactId>
 <version>2.2</version>
 <configuration>
  <!--端口号-->
  <port>80</port>
  <!--访问路径-->
  <path>/</path>
 </configuration>
</plugin>

10.7 跳转网页练习

  1. 需求

    在 ServletDemo1 中,完成跳转到 hello.jsp

  2. 实现步骤

    1. 打开 mave_web 工程的 pom.xml 文件,添加坐标,导入 jar 包,添加 tomcat7 插件

      <?xml version="1.0" encoding="UTF-8"?>
      
      <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">
        <modelVersion>4.0.0</modelVersion>
      
        <groupId>com.zt</groupId>
        <artifactId>maven_web</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
      
        <name>maven_web Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
      
        <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <maven.compiler.source>1.7</maven.compiler.source>
          <maven.compiler.target>1.7</maven.compiler.target>
        </properties>
      
        <dependencies>
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
          </dependency>
          <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
          </dependency>
        </dependencies>
      
        <build>
          <finalName>maven_web</finalName>
          <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
              <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
              </plugin>
              <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
              <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
              </plugin>
              <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
              </plugin>
              <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
              </plugin>
              <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                  <port>80</port>
                  <path>/</path>
                </configuration>
              </plugin>
            </plugins>
          </pluginManagement>
        </build>
      </project>
      
    2. 创建 ServletDemo1

      package com.zt.servlet;
      
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class ServletDemo1 extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doGet(request,response);
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              request.getRequestDispatcher("hello.jsp").forward(request,response);
          }
      }
      
      
    3. 在 web.xml 中配置路径

      <!DOCTYPE web-app PUBLIC
       "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd" >
      
      <web-app>
        <display-name>Archetype Created Web Application</display-name>
        <servlet>
          <servlet-name>ServletDemo1</servlet-name>
          <servlet-class>com.zt.servlet.ServletDemo1</servlet-class>
        </servlet>
        <servlet-mapping>
          <servlet-name>ServletDemo1</servlet-name>
          <url-pattern>/ServletDemo1</url-pattern>
        </servlet-mapping>
      </web-app>
      
      
    4. 创建 hello.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title></title>
      </head>
      <body>
      Hello World!
      </body>
      </html>
      
      
    5. 点击 Maven Projects,输入 Command line

      tomcat7:run
      
    6. 打开浏览器,访问

      http://localhost/ServletDemo1
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bm1998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值