01-Maven
课程目标
1.Maven概述
2.Maven入门使用
3.仓库
4.关联Idea
5.Maven指令
6.私服
Maevn概述
引言
项目中jar包资源越来越多,jar包的管理越来越繁琐。
- 要为每个项目手动导入所需的jar,需要搜集全部jar--繁琐。
- 项目中的jar如果需要版本升级,就需要重新搜集jar--复杂。
- 相同的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个文件。其中文件夹说明如下:
- bin:含有mvn运行的脚本;
- boot:含有plexus-classworlds类加载器框架,Maven使用该框架自己的类库;
- conf:含有settings.xml配置文件;
- lib:含有Maven运行时锁需要的java类库。
环境变量
maven依赖java环境,所以要确保java环境已配置好(maven-3.3+需要jdk7+)
maven本身有2个华宁变量需要配置:
- MAVEN_HOME=maven的安装目录;
- 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项目的目录结构是统一的,我们要熟悉。
- src/main/java存放源代码,建包,放项目中代码(service,dao,User,...)
- src/main/resources书写配置文件,项目中的配置文件(jdbc.properties)
- src/test/java书写测试代码,项目中测试案例代码
- src/test/resources书写测试案例相关文件,这个idea创建好后没有,需要我们自动创建,当然不用的话就不创建。
- 项目根/pom.xml(project object model)maven项目核心文件,其中定义项目构建方式,声明依赖等
注意:项目中的建包,建类,执行,都和普通项目无差异。
项目类型
根据项目类型,在pom.xml中做出对应配置,添加配置:<packaging>jar</packaging>
导入依赖jar
建好项目后,需要导入需要的ajr,要通过【坐标】
- 每个构件都有自己的坐标(标识)=group+artifactId+version=项目标识+项目名+版本号
- 在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面板
暂略
私服
赞略