1_Maven
一. 引言
1.1 项目管理问题
- 项目中jar包资源越来越多, jar包的管理越来越沉重
1.1.1 繁琐
- 要为每个项目手动导入所需的jar, 需要搜集全部的jar
1.1.2 复杂
- 项目中的jar如果需要版本升级, 就需要重新搜集jar
1.1.3 冗余
相同的jar在不同的项目中保存了多份
1.2 项目管理方案
- Java项目需要一个统一的便捷的管理工具: Maven
二. Maven介绍
- Maven这个单词来自意第绪语(犹太语), 意为知识的积累
- 是一个基于项目对象模型(POM)的概念的纯Java开发的开源的项目管理工具
- 主要用来管理java项目, 进行依赖管理
- jar包依赖管理
- 项目构建
- 项目编译, 打包, 测试, 部署
- 分块开发
- 提高开发效率
三. Maven安装
3.1 下载
下载链接: https://maven.apache.org/docs/history.html
下载apache-maven-3.5.4-bin.zip (适用于Windows系统), 然后解压
有如下目录
- bin: 含有mvn运行的脚本
- boot: 含有plexus-classworlds类加载器框架, Maven使用该框架加载自己的类库
- conf: 含有setting.xml配置文件
- lib: 含有maven运行时所需要的java类库
3.2 配置环境变量
- 系统环境变量下:
- 新增:
- 变量名: MAVEN_HOME
- 值: D:\Program Files\Maven_shine\apache-maven-3.5.4 (自己Maven的解压目录)
- 点击path
- 最后方加上;%MAVEN_HOME\bin%
- 新增:
- 测试
- 命令行下输入 mvn -v 查看版本信息
四. Maven配置
- Maven的conf目录下的setting.xml配置
4.1 本地仓库
<localRepository>D:\Program Files\Maven\repository</localRepository>
<!-- 选择一个磁盘目录, 作为本地仓库 -->
4.2 JDK配置
- 在标签中 增加一个标签 ,限定Maven项目默认的jdk版本
<!-- 在已有的profiles标签中添加profile标签 -->
<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>
五. 仓库
5.1 概念
- 存储依赖的地方, 体现形式就是本地的一个目录
- 仓库中不仅存放依赖, 而且管理着每个依赖的唯一标识(坐标), Java项目凭坐标获取依赖
5.2 仓库分类
- Maven仓库
- 本地仓库
- 远程仓库
- 中央仓库
- 公共仓库
- 私服
当需要依赖时, 会从仓库中查找, 优先顺序为
本地仓库>私服(如果配置了的话)>公共仓库(如果配置了的话)>中央仓库
5.3 本地仓库
- 即在settings.xml 中配置的目录
- 使用过了的依赖都会自动存储在本地仓库中, 后续可以复用
5.4 远程仓库
5.4.1 中央仓库
- Maven的中央仓库是由Maven社区提供的仓库, 不用任何配置, Maven中内置了中央仓库的地址, 其中包含了绝大多数流行的开源Java构件
- https://mvnrepository.com/ 可以搜索需要的依赖的相关信息(仓库搜索服务)
- https://repo.maven.apache.org/maven2/ 中央仓库地址
5.4.2 公共仓库[重点]
- 除中央仓库之外, 还有其他远程仓库, 比如aliyun仓库(https://maven.aliyun.com/nexus/content/groups/public)
- 中央仓库在国外, 下载依赖速度过慢, 所以都会配置一个国内的公共仓库代替中央仓库
- 在setting.xml中添加以下配置
<!-- 在mirror标签下添加mirror标签 -->
<mirror>
<id>aliyun</id>
<!-- 中心仓库的mirror 镜像 -->
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<!-- aliyun仓库地址 以后所有要指向中心仓库的请求 都会指向aliyun仓库 -->
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 或者可以配置华为镜像, 配置如下:
<mirror>
<id>huaweicloud</id><!-- 镜像id -->
<!-- 设置镜像匹配的仓库 -->
<mirrorOf>Central</mirrorOf>
<name>Nexus huaweicloud</name>
<!-- 华为仓库地址 以后所有要指向中心仓库的请求 都会指向华为仓库 -->
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
5.4.3 私服[了解]
- 公司范围内共享的仓库, 不对外开放
- 可以通过Nexus来创建, 管理一个私服
六. IDEA-Maven
6.1 在IDEA中关联Maven
- 在IDEA中关联本地安装的Maven, 后续就可以通过IDEA使用Maven, 管理项目了
- settings for new projects-->Build, Execution, Deployment-->Build Tools-->Maven
- Maven home directory
- Maven的安装路径
- User settings file
- Maven的配置文件settings.xml路径, 在Maven的conf目录下
- Local repository
- Maven的本地仓库路径
- Maven home directory
- 因为现在阿里云不支持http访问, 支持https, 所以有SSL证书验证的问题
- [重要]所以还需要在IDEA中添加一个配置
- 在Maven下的Importing的VM options for importer下导入
- -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
6.2 创建Maven项目
6.2.1 新建项目
- 新建项目, 选择Maven
- 确认自己的JDK是否已经选上
- 点击Next
6.2.2 项目位置
- Name: 项目名称
- Location: 项目保存位置
6.2.3 指定项目名
- GroupId: 项目标识,通常是公司域, 例: com.baidu
- ArtifactId: 项目名称
- Version: 项目版本号, 默认为1.0-SNAPSHOT
6.2.4 项目结构
- src/main/java 存放源代码, 建包, 放项目中的代码(service, dao, servlet...)
- src/main/resources 书写配置文件, 项目中的配置文件(jdbc.properties)
- src/test/java 书写测试代码, 项目中测试案例代码
- src/test/resources 书写测试案例相关配置文件
- 根目录/pom.xml(project object model) Maven项目核心文件, 其中定义项目构建方式, 声明依赖等
- 注意: 项目中的建包, 建类, 执行, 都和普通项目无差异
6.2.5 项目类型
- 根据项目类型, 在pom.xml中做出对应配置, 添加配置: war或者jar
<?xml version="1.0" encoding="UTF-8"?>
<!--pom: project object model-->
<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.dz</groupId>
<artifactId>MavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式 如果是java项目则用jar
如果是web项目则用war-->
<!--<packaging>jar</packaging>-->
<packaging>war</packaging>
</project>
6.2.6 设置编译编码格式
<properties>
<!--编译编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
6.3 导入依赖jar
创建好项目后, 需要导入需要的jar, 要通过
坐标
- 每个构件都有自己的坐标, GroupId + ArtifactId + Version = 项目标识 + 项目名 + 版本号
- 在Maven项目中只需要配置坐标, Maven便会自动加载对应依赖, 删除坐标则会自动移除依赖
6.3.1 查找依赖
- 依赖查找服务: https://mvnrepository.com/ , 获得依赖的坐标, 然后在Maven项目中导入
6.3.2 导入依赖
- 在项目的pom.xml文件中, 增加依赖
<packaging>war</packaging>
<properties>
<!--编译编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--定义项目中需要的所有依赖-->
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<!--jstl支持-->
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
6.3.3 同步依赖
- 引入坐标后, 同步依赖, 确认导入
- 在我们引入坐标后, IDEA通常会自动弹出导入依赖的选项, 我们点击即可 或者在IDEA的最右侧边框处有Maven, 在此处刷新
6.4 创建web项目
6.4.1 打包方式
- pom.xml中设置war
<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.dz</groupId>
<artifactId>MavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式 如果是java项目则用jar
如果是web项目则用war-->
<!--<packaging>jar</packaging>-->
<packaging>war</packaging>
</project>
6.4.2 web依赖
- 导入servlet 和 JSP 和 JSTL依赖, 使项目具有web编译环境
<?xml version="1.0" encoding="UTF-8"?>
<!--pom: project object model-->
<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.dz</groupId>
<artifactId>MavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式 如果是java项目则用jar
如果是web项目则用war-->
<!--<packaging>jar</packaging>-->
<packaging>war</packaging>
<properties>
<!--编译编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--定义项目中需要的所有依赖-->
<dependencies>
<!--web 项目的编译环境-->
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<!--jstl支持-->
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<!--servlet编译环境-->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
<dependency>
<!--jsp编译环境-->
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
</dependencies>
</project>
折叠
6.4.3 webapp目录
- 按照Maven规范, 在main目录下新建web项目的特有目录 webapp
- webapp目录下新建WEB-INF目录
- WEB-INF目录下新建web.xml
<?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_3_1.xsd"
version="3.1">
</web-app>
6.4.4 定义Servlet和JSP
- main-->java-->com.dz-->servlet下新建TestServlet
package com.dz.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;
@WebServlet(name = "TestServlet", value = "/test")
public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Test Servlet!");
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
- webapp目录下新建index.jsp
<%@ 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>
6.5 部署web项目
6.5.1 新增Tomcat
- 点击Edit Configuration(运行图标的左侧)
- 点击+, 找到Tomcat Server下的Local
- 点击OK
- 在Server下自定义Tomcat名称 Name:
- 点击configure, 选择Tomcat的安装目录
- 点击OK即可
6.5.2 部署web项目
- 还是点击Edit Configuration(运行图标的左侧)
- 然后找到Deployment并点击
- 在右侧点击+, 选择Artifact, 然后选项目名:war exploded, 这表示我们把此项目成功部署到了Tomcat下
- Deployment下的Application context是项目默认访问路径; 可以自定义, 建议和项目同名, 比如: /MavenProject, 或者为了访问简单, 可以直接设置: /
- 最后点击OK即可
6.5.3 启动Tomcat
- 方法一: 点击IDEA上方的运行图标
- 方法二: 在IDEA最下一行找到Services, 点开后在此处运行Tomcat
- 最后等待弹出浏览器框: 路径: localhost:8080/MavenProject/, 这个默认是自动跳转到webapp下index.jsp中, 我们在网址后方加上test, 就访问到我们创建的TestServlet了
6.6 依赖生命周期
6.6.1 概念
- Jar包生效的时间段, 即Jar的生命周期
6.6.2 使用方式
- 项目中导入的依赖可以做生命周期的管理
<dependencies>
<dependency>
<!--jstl支持-->
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!--servlet编译环境-->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--生命周期-->
<scope>provided</scope>
</dependency>
<dependency>
<!--jsp编译环境-->
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<!--生命周期-->
<scope>provided</scope>
</dependency>
</dependencies>
6.6.3 生命周期详解
- compile
- 缺省值, 适用于所有阶段(测试运行, 编译, 运行, 打包)
- provided
- 类似compile, 期望JDK, 容器或使用者会提供这个依赖, 如servlet-api.jar; 适用于(测试运行, 编译)阶段
- runtime
- 只在运行时使用, 如MySQL的驱动jar, 适用于(运行, 测试运行)阶段
- test
- 只在测试时使用, 适用于(编译, 测试运行)阶段, 如junit.jar
- system
- Maven不会在仓库中查找对应依赖, 而在本地磁盘目录中查找; 适用于(编译, 测试运行, 运行)阶段
七. Maven指令
7.1 命令行
- 通过IDEA打开命令行, 然后执行Maven命令
- 也就是在Terminal中执行Maven命令, 例如输入:
- mvn -v 查看Maven版本号
- mvn clean 清除上次编译的结果(target)
7.2 Maven面板
- IDEA中有Maven面板(IDEA最右侧边框上), 其中可以快速执行Maven指令
- 双击即可快速执行
- maven常用命令:
- mvn clean 清空产生的项目( target)
- mvn compile 编译源代码
- mvn package 打包, 默认打包jar包, 如果配置了war则打包war包
- mvn install 在本地repository中安装jar(包含mvn compile,mvn package,然后上传到本地仓库)
- mvn deploy 上传到私服(包含mvn install,然后,上传到私服)
- mvn test 运行测试
- mvn site 产生site
- mvn test-compile 编译测试代码
- mvn -Dtest package 只打包不测试
- mvn jar:jar 只打jar包
- mvn test -skipping compile -skipping test-compile 只测试而不编译,也不测试编译
- mvn source.jar 源码打包
八. 私服
8.1 概念
- 私服是架设在局域网的一种特殊的远程仓库, 目的是代理远程仓库及部署第三方构件
- 有了私服后, 当Maven需要下载依赖时, 直接请求私服, 私服上存在则下载到本地仓库; 否则, 私服请求外部的远程仓库, 将构件下载到私服, 再提供给本地仓库下载
- 私服可以解决在企业做开发时每次需要的jar包都要在中心仓库下载, 且每次下载完只能被自己使用, 而不能被其他开发者使用的问题
- 所谓私服就是一个服务器, 但是不是本地层面的, 是公司层面的, 公司中所有的开发人员都在使用同一个私服
8.2 架构
- 无私服时
- 本地仓库-->远程仓库
- 有私服时
- 本地仓库-->私服-->远程仓库
- 我们可以使用专门的Maven仓库管理软件来搭建私服, 比如:Apache Archiva, Artifactory, Sonatype Nexus, 这里我们使用Sonatype Nexus
8.3 Nexus安装[了解]
8.3.1 下载
- 官网: https://blog.sonatype.com/
- 下载地址: https://help.sonatype.com/repomanager2/download/download-archives---repository-manager-oss
8.3.2 安装
- 下载nexus-2.x-bundle.zip, 解压即可
8.4 启动[了解]
- 解压后在bin目录中执行(或者直接为Nexus配置环境变量, 和Maven同理):(以管理员身份运行cmd)
- nexus install 在系统中安装nexus 服务
- nexus uninstall 卸载nexus 服务
- nexus start 启动服务
- nexus stop 停止服务
8.5 Nexus 登陆[了解]
- 访问私服: http://localhost:8081/nexus/
- 默认账号: admin 密码: admin123
8.6 仓库列表[了解]
- 仓库类型
- group: 包含多个仓库, 通过group库的地址可以从包含的多个仓库中查找构件
- hosted: 私服服务器本地的仓库, 其中存储诸多构件
- proxy: 代理仓库, 其会关联一个远程仓库, 比如中央仓库, aliyun仓库, 向该仓库查找构件时, 如果没有会从其关联的仓库中下载
- 仓库名
- Releases: 存放项目的稳定发布版本, 一个模块做完后如果需要共享给他人, 可以上传到私服的该库
- Snapshots: 对应不稳定的发布版本
- 3rd party: 存放中央仓库没有的, 如ojdbc.jar, 可以上传到私服的该库中
8.7 Maven中配置私服[重点]
- 在Maven中配置私服, 使得Maven可以从私服上获取构件
8.7.1 仓库组
- 而此时就有问题, 私服中有很多仓库, 每个仓库都有自己的url, 那么项目中配置哪个仓库呢?
- 私服中有一个仓库组, 组中包含多个仓库, 可以指定仓库组的url, 即可以从多个仓库中获取构件
- 点击仓库central-->Configuration-->Remote Storage Location
- 把此路径换成华为云的: https://mirrors.huaweicloud.com/repository/maven/ 国内镜像下载速度很快, 也可换成阿里的, 都很快
- 然后把Download Remote Indexes设置为True, 这是下载远程索引, 为了以后更好更方便的使用依赖
- 点击仓库Public Repositories-->Configuration
- 将3rd party从左侧的Ordered Group Repositories移到右侧的Avaliable Repositories(通过点击右箭头的方式)
- 左侧的Ordered Group Repositories重新排序, Central排到第一位(鼠标拖拽), 此顺序代表提供依赖的仓库优先级, 现在的Central(已关联华为云)第一优先提供依赖
8.7.2 Maven关联私服
- 配置setting.xml, 设置私服地址, 认证等信息
- 复制时不要复制两头的大标签, 例如< servers>< /servers>, 只需把其内容复制到对应大标签下
<servers>
<!-- 设置私库认证信息(访问) -->
<server>
<id>nexus-public</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<!-- 设置代理镜像 -->
<id>huaweicloud</id>
<!-- 为Central中央仓库设置华为云镜像 -->
<mirrorOf>Central</mirrorOf>
<name>Nexus huaweicloud</name>
<!-- 华为仓库地址 以后所有要指向中心仓库的请求 都会指向华为仓库 -->
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
</mirrors>
<profiles>
<!-- 设置私服地址(仓库组) -->
<profile>
<id>nexus</id>
<repositories>
<repository>
<!-- nexus的认证id -->
<id>nexus-public</id>
<!-- name随便 -->
<name>Naxus Release Snapshot Repository</name>
<!-- nexus中仓库组对应的地址 -->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<!-- 插件仓库地址, 各节点的含义和上面是一样的 -->
<pluginRepositories>
<pluginRepository>
<!-- nexus的认证id -->
<id>nexus-public</id>
<!-- nexus中仓库组对应的地址 -->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
<profile>
</profiles>
<!-- 激活nexus -->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
折叠
- 至此, Maven项目需要依赖时, Maven会从私服中下载
8.8 Maven项目部署到私服
- 执行: mvn deploy 即可将项目部署到私服对应的仓库中, 此时项目中的打包方式多为jar
- 但需要提前在项目的pom.xml中配置部署私服仓库位置, 如下
<!-- 在项目的pom.xml中 配置私服的仓库地址, 可以将项目打jar包部署到私服-->
<distributionManagement>
<snapshotRepository>
<id>nexus-public</id><!-- nexus的认证id -->
<name>User Project Snapshot</name>
<!-- Snapshots仓库地址-->
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
<repository>
<id>nexus-public</id><!-- nexus的认证id -->
<name>User Project Release</name>
<!-- Releases仓库地址-->
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
- 注意: 如上的id依然要和setting.xml中配置的server中的id保持一致, 才能通过私服的验证
- 项目部署到Snapshots仓库中还是Releases仓库中取决于我们< version>1.0-SNAPSHOT< /version> 中写的是SNAPSHOT还是RELEASE(或者不写,默认就是这个)
1_Maven的更多相关文章
随机推荐
- X86寄存器
前置知识 x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构.最早的8086处理器于1978年由Intel推出,为16位微处理器. 80X86 包括Intel 8086.8018 ...
- 减省 Java 小半内存,Solon v1.9.2 发布
相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) qps 高 2- 3 倍. (更高) 运行时内存节省 1/3 ~ 1/2. (更少) 打包 ...
- SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移?
Liquibase是一个用于用于跟踪.管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(ro ...
- 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...
- JS常用的3种弹出框
1.提示框 alert // 没有返回值 alert('你好'); 2.确认框 confirm // 返回 false/true let res = confirm('确定删除?'); if(res ...
- AI目标分割能力,无需绿幕即可实现快速视频抠图
绿幕抠图是影视制作过程中常见的技术手段,常用于视频中抠除并替换背景,通过后期加工实现视频剪辑制作的更多可能性.然而,绿幕抠图技术制作成本费时费力,无法应用于日常生活. 华为视频编辑服务近期上线目标分割 ...
- vue-resource && axios
1 # axios 2 # 1.安装:npm i axios 3 # 2.使用: 4 import axios from 'axios' 5 axios.get(URL).then(response= ...
- Java核心知识体系3:异常机制详解
1 什么是异常 异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到.网络连接失败.空指针.非法参数等. 异常是一个事件,它发生在程序运行期间,且中断程序的运行. Java ...
- BZOJ1305/Luogu3153 [CQOI2009]dance跳舞 (network flow)
#define T 1001 #define S 0 struct Edge{ int nxt,pre,w; }e[500007]; int cntEdge,head[N]; inline void ...
- MySQL查询性能优化七种武器之链路追踪
MySQL优化器可以生成Explain执行计划,我们可以通过执行计划查看是否使用了索引,使用了哪种索引? 但是到底为什么会使用这个索引,我们却无从得知. 好在MySQL提供了一个好用的工具 - opt ...