01-Maven

课程目标

1.Maven概述

2.Maven入门使用

3.仓库

4.关联Idea

5.Maven指令

6.私服

Maevn概述

 引言

项目中jar包资源越来越多,jar包的管理越来越繁琐。

  1. 要为每个项目手动导入所需的jar,需要搜集全部jar--繁琐。
  2. 项目中的jar如果需要版本升级,就需要重新搜集jar--复杂。
  3. 相同的jar在不同的项目中保存了多分--存储冗余,散乱。

java项目需要一个统一的便捷的管理方法。

介绍

Maven这个单词来自于易第绪语(犹太语),意为知识的积累。

Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具。主要用来管理java项目。进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分块开发,提高开发效率。

安装

下载maven

地址:https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/

 

 Maven安装

解压

注意:Maven解压即课用,因此解压目录为安装目录。戒烟文件尽量不要放在含有中文或者特殊字符的目录下。

解压后内部含有4个文件夹,3个文件。其中文件夹说明如下:

  1. bin:含有mvn运行的脚本;
  2. boot:含有plexus-classworlds类加载器框架,Maven使用该框架自己的类库;
  3. conf:含有settings.xml配置文件;
  4. lib:含有Maven运行时锁需要的java类库。

 

 环境变量

maven依赖java环境,所以要确保java环境已配置好(maven-3.3+需要jdk7+)

maven本身有2个华宁变量需要配置:

  1. MAVEN_HOME=maven的安装目录;
  2. PATH=maven的安装目录下的bin目录。

 

测试

打开命令行窗口:

#查看maven版本信息
mvn -v

 

配置

本地仓库

maven的conf目录中有settings.xml,时maven的配置文件,做如下配置:

 

<localRepository>D:\developer_tools\Java\maven_repository_for3.5.4</localRepository>

 

我d

 

说明:配置文件中的地址为存放maven管理的jar包的位置,是自己新建的一个文件夹。

 JDK配置

 在<profiles>标签中增加一个<profile>标签,限定maven项目默认的jdk版本。内容如下

 

<profile>    
    <id>jdk-1.8</id>    
    <activation>    
        <activeByDefault>true</activeByDefault>    
        <jdk>1.8</jdk>    
    </activation>    
    <properties>    
        <maven.compiler.source>1.8</maven.compiler.source>    
        <maven.compiler.target>1.8</maven.compiler.target>                
     <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>

 

<!--让增加的profile生效-->
<activeProfiles>
    <activeProfile>jdk-1.8</activeProfile>
</activeProfiles

 

 

 

 

仓库

存储依赖的地方。

仓库不仅存放依赖,而且每个依赖都有唯一标识(坐标),供java项目索取。

仓库分类

 

 本地仓库:其实就是上面建的文件夹,会把下载的jar包存储到里面。

远程仓库-中央仓库:安装了maven,就会自动映射这个仓库,不需要任何配置,但由于服务器在国外,访问慢。

远程仓库-公共仓库:由于远程仓库访问慢,因此有些企业等建立了公共仓库供大家使用,如阿里云仓库,后面我们会配置。

远程仓库-私服:是公司内部搭建的远程仓库,访问是远程仓库中最快的,也可以放一些公司自己搭建的jar包。后面我们会试着安装私服。

当需要依赖时,会从仓库中去查找,优先顺序为:

本地仓库->私服(如果配置)->公共仓库(如果配置)->中央仓库

本地仓库

即在setting.xml中配置的目录,是上面我们新建的,并配置在配置文件中。当然现在是什么也没有的。

使用过的依赖都会自动存储在本地仓库中,后续可以复用。因此本地仓库会越来越壮大。

远程仓库

中央仓库

Maven中央仓库是由Maven社区提供的仓库,不用任何配置,maven中内置了中央仓库地址。

其中包含了绝大多数流行的开源Java构件。

公共仓库(重点)

除中央仓库之外,还有其它远程仓库。

比如aliyun仓库(http://maven.aliyun.com/nexus/content/groups/public)

中央仓库在国外,下载依赖速度过慢,所以都会配置一个国内的公共仓库替代中央仓库。

<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>

 

 

 私服(了解)

 公司范围内共享的仓库,不对外开放。

可以通过nexus来创建、管理一个私服。

后续章节会讲解,不过我可能会直接略过。

关联Idea

在idea中关联mavem

在idea中关联本地安装的maven,后续就可以通过idea使用maven,管理项目啦。

 

 

 

 

创建Maven项目

上面已经在idea中关联了maven,现在就可以在idea中基于maven构建项目了。

新建项目

新建项目,要选择maven选项

 

 

 

指定项目名

 

 

 

项目位置

 

 

 点击自动导包。

项目结构

maven项目的目录结构是统一的,我们要熟悉。

  1. src/main/java存放源代码,建包,放项目中代码(service,dao,User,...)
  2. src/main/resources书写配置文件,项目中的配置文件(jdbc.properties)
  3. src/test/java书写测试代码,项目中测试案例代码
  4. src/test/resources书写测试案例相关文件,这个idea创建好后没有,需要我们自动创建,当然不用的话就不创建。
  5. 项目根/pom.xml(project object model)maven项目核心文件,其中定义项目构建方式,声明依赖等

注意:项目中的建包,建类,执行,都和普通项目无差异。

 

 

 

项目类型

根据项目类型,在pom.xml中做出对应配置,添加配置:<packaging>jar</packaging>

导入依赖jar

建好项目后,需要导入需要的ajr,要通过【坐标】

  1. 每个构件都有自己的坐标(标识)=group+artifactId+version=项目标识+项目名+版本号
  2. 在maven项目中需要配置坐标,maven便会自动加载对应依赖。删除坐标会移除依赖。

 

查找依赖

依赖查找服务:https://mvnrepository.com/,获得依赖的坐标,在maven项目中导入。也可以直接百度maven,这个链接。

导入依赖

然后搜索,复制,并放入pom文件即可。

创建web项目

打包方式

pom.xml中设置<packaging>war</packaging>

对于jar是默认方式,不写就是jar。

 

web依赖

 导入JSP和Servlet和JSTL依赖,使项目具有web编译环境。

<?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.qf</groupId>
    <artifactId>test_shine</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--设置项目类别 java项目是jar javaWeb项目是war-->
    <packaging>war</packaging>

    <!--定义项目中需要的所有依赖-->
    <dependencies>
        <!--jstl支持-->
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--servlet编译环境-->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--jsp编译环境-->
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
</project>

 

webapp目录

 按照maven规范,新建web项目特有目录

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0" >

    <!--这是一个空白的web.xml文件模板-->
</web-app>

 

定义Servlet和Jsp

 下面就是正常定义我们锁需要的Servlet和JS

 

 

 

servlet代码:

package com.qf.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author YCKJ-GaoJT
 * @create 2020-11-02 17:06
 **/
@WebServlet("/shine")
public class ShineServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("shine servlet");
        //转发跳转 index.jsp
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
    }
}

index.jsp代码

<%--
  Created by IntelliJ IDEA.
  User: YCKJ3911
  Date: 2020/11/2
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <span style="color: red;">Hello world</span>
</body>
</html>

 

部署web项目

 新增Tomcat

这里略(P5的6分钟之后),因为我Tomcat没有安装,这里后续补充,先学习P6及之后

部署web项目

 

启动Tomcat

 

依赖生命周期

项目中导入的依赖可以做生命周期的管理,生命周期是指这个依赖在哪些过程中是有效的。

这里还有一些讲解,是和上面省略的有一点关系,不长,后续补充下,P6

maven有生命周期如下:

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

 

Maven指令

命令行

由于有一点涉及上面,因此笔记暂时不做。后续补充。

maven面板

暂略

私服

赞略

posted @ 2020-11-02 18:01  峡谷挨打记  阅读(113)  评论(0编辑  收藏  举报