day01-maven基础-20210925-程序员宅基地

技术标签: java  maven  eclipse  


typora-copy-images-to: img

maven

学习目标

  1. 能够了解Maven的作用
  2. 能够理解Maven仓库的作用
  3. 能够理解Maven的坐标概念
  4. 能够掌握Maven的安装
  5. 能够掌握IDEA配置本地Maven
  6. 能够使用IDEA创建javase的Maven工程
  7. 能够使用IDEA创建javaweb的Maven工程
  8. 能够自定义javeweb的Maven工程
  9. 能够掌握依赖引入的配置方式
  10. 能够了解依赖范围的概念

一、maven概述

1.1、项目开发中的问题

​ 在之前中的项目中,我们大量导入jar包, 这会导致如下的问题:

  1. 造成包的冗余:每个项目需要复制一次这些包,占用大量的空间。

  2. 不易管理:不同的开发者使用的jar包的版本不同,导致包不统一,甚至出现包的冲突。

  3. 阅读性差 : 应该导入哪些jar包,这些包又依赖了哪些包并不清楚。

2.1、maven是什么

2.1.1 maven定义
Apache Maven是一个软件,项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

 maven:本质上是一个管理项目的软件																maven是Apache出品, 也是用java写的 											
2.2.1 maven的作用
  1. 项目构建管理: maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行。

  2. 管理依赖(jar包): maven能够帮我们统一管理项目开发中需要的jar包;

  3. 管理插件: maven能够帮我们统一管理项目开发过程中需要的插件;

二、maven快速入门

2.1、maven的下载与安装

下载

官方网站:http://maven.apache.org/
下载页面:http://maven.apache.org/download.cgi

在这里插入图片描述
注:本教程使用的是3.6.1版本的maven。

安装

​ maven安装包下载完成后是一个压缩文件,如下图所示:
在这里插入图片描述

我们需要将压缩包解压到一个没有中文,空格或其他特殊字符的文件夹内即可使用:

在这里插入图片描述

2.2、maven安装目录简介

在这里插入图片描述

2.3、maven配置-环境变量

2.3.1 配置JAVA_HOME

​ 3.3以上版本的maven软件依赖1.7或以上版本的JDK,所以安装maven之前需要确认jdk的版本和JAVA_HOME是否正确配置:

在这里插入图片描述在这里插入图片描述
注意:JAVA_HOME路径需要设置成bin目录的上一级目录

2.3.2配置MAVEN_HOME

​ 按照上面JAVA_HOME的配置方式,将maven的安装目录配置到环境变量中。MAVEN_HOME=maven压缩包解压目录。

第一步:新增环境变量:MAVEN_HOME

在这里插入图片描述
第二步:在path环境变量中添加:%MAVEN_HOME%\bin 或者 %MAVEN_HOME%\bin ;

在这里插入图片描述
第三步:测试:在cmd控制台中输入命令: mvn -v 或者 mvn -version ;如果出现以下maven的版本信息,则说明maven的安装与环境变量的配置均正确;

在这里插入图片描述

# maven安装回顾
1. 解压 maven的压缩包,注意路径中不要有中文
2. 配置java_home: maven是用java编写的,运行需要jdk
3. 配置maven_home : 之后要使用maven的命令

2.4、maven仓库配置

maven的仓库可以分为3种:

仓库名称 作用
本地仓库 相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。
中央仓库 是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2
私服 是远程仓库, 一般是在公司内部架设一台私人服务器对外公开。开发中经常使用的国内私服:阿里云 http://maven.aliyun.com/nexus/content/groups/public

在这里插入图片描述

​ 注: 由于中央仓库服务器在国外,网速比较慢,我们一般远程仓库使用私服.

在这里插入图片描述

2.4.1 配置本地仓库

​ 本地仓库的位置是通过maven的核心配置文件(settings.xml)来配置的。settings.xml文件位于maven安装目录:…\apache-maven-3.5.2\conf\settings.xml 。

  1. 在你的电脑上创建一个空文件夹,每个人的本地仓库是自己慢慢生长起来的。
e:\repository
  1. 配置本地仓库,修改maven的安装目录中conf/settings.xml文件,在53行配置本地仓库为上面的目录。默认是注释掉的。
<localRepository>e:\repository</localRepository>
  1. 私服配置,修改settings.xml文件,159行指定中央仓库的镜像。这里使用的是阿里云的中央仓库,速度比官方的快很多。注:要保留mirrors (s)
<mirror>  
	<id>nexus-aliyun</id>  
	<mirrorOf>central</mirrorOf>    
	<name>Nexus aliyun</name>  
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror>
<mirror>
		<id>aliyunmaven</id>
		<mirrorOf>*</mirrorOf>
		<name>阿里云公共仓库</name>
		<url>https://maven.aliyun.com/repository/public</url>
</mirror>
  1. 修改maven使用JDK的版本,200行。如果不配置就需要在idea中配置。maven默认使用的是JDK1.5的版本,这里使用1.8的版本。
<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>

5). 私服说明

【传智局域网私服】- 局域网用

 <mirror>
      <id>my</id>
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://192.168.50.187:8081/repository/maven-public/</url>
 </mirror>

【阿里云私服】–连外网时使用

<mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>*</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>
 <mirror>
		<id>aliyunmaven</id>
		<mirrorOf>*</mirrorOf>
		<name>阿里云公共仓库</name>
		<url>https://maven.aliyun.com/repository/public</url>
</mirror>

注: 千万注意, 只可配置一个(另一个要注释!) 不然两个可能发生冲突 ,导致jar包下不下来 !!!

2.4.2 总结
  1. 资料中的settings.xml 文件覆盖 maven/conf/settings.xml
  2. 修改本地仓库 localRepository (事先创建一个文件夹 repository)
  3. 远程仓库,以后可能修改: 现在默认阿里云,可能需要切换(两个只能配一个,另一个要注释)

三、IDEA创建maven工程【重点】

​ maven中提供了一个插件archetype,这个插件可以帮助我们创建maven的标准项目。命令是:

mvn archetype:generate 但是,开发过程中我们往往不使用命令来创建,而是直接使用工具创建maven项目。

(大家第一次使用maven, 要联网 )

1、IDEA配置本地maven

​ 使用idea创建maven工程之前需要将本地的maven配置到idea环境中,配置方法如下:

1.1 配置本地maven
  1. 第一步:打开default settings(对以后的新建工程生效):

2018.2 版idea

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

  1. 第二步:配置maven_home和settings.xml的路径:

在这里插入图片描述

1.2 配置maven参数

​ 使用idea创建maven项目后,默认会去网络中下载一些配置资源。需要设置参数archetypeCatalog。设置方法如下:将-DarchetypeCatalog=internal 设置到Maven–Runner–VM Options中。

在这里插入图片描述

参数:
-DarchetypeCatalog=internal

2、创建maven的java工程

​ 使用maven创建的项目可分为3种类型:普通java项目web项目maven的父工程。 这三种项目对象的打包方式分别是:jar,war和pom。本课程只涉及到普通的java项目和web项目的创建。

编写代码 -> 编译 -> 打包 -> 发布

jar : java archives (java项目的压缩包: 主要.class文件)

war : web archives (web项目的压缩包: 除了.class文件,多资源文件)

# idea中的项目和模块的区别
1. 介绍
	1) 项目: project 
	2) 模块 : module

2. 规范用法
	1). 一个项目可以包含多个模块的
	2). 模块之间一般是有关系的
	
3. 学习阶段的做法
	1). 创建一个empty project
	2). 每天创建一个模块(在idea中,一屏一个项目,方便回顾)
4. 问题
	1). 一个空工程,每天学习一个模块,A模块有问题,B模块也运行不了
	

2.1 创建步骤
  1. 第一步:File–New–Module(或者project)
    在这里插入图片描述

  2. 第二步:选择maven然后下一步:

在这里插入图片描述

  1. 第三步:填写项目的坐标信息:

在这里插入图片描述

附:

GroupID是项目组织唯一的标识符, 比如我的项目叫test001  那么GroupID应该 com.itheima.test001   域名.公司名.项目名

ArtifactID就是项目的唯一的标识符, 一般是 项目名-xxx   比如test001-model 
  1. 第四步:指定项目名称和路径:idea会把项目名中的- 去掉,我们给添加上即可。

在这里插入图片描述

2.2 java工程目录简介

在这里插入图片描述

2.3 测试

在java目录下创建包:com.heima.maven。然后,创建一个java类MavenTest,编写以下代码进行测试:

package com.heima.maven;

public class MavenTest {
    
    public static void main(String[] args) {
    
        System.out.println("Hello World!");
    }
}

运行程序:点击main方法左侧的绿色小三角,点击图标1 或者图标2 运行程序:

在这里插入图片描述

运行结果:如果控制台上能够正常打印如下信息,则说明工程创建没问题:

在这里插入图片描述

3、创建web项目 (练三遍)

3.1 创建步骤
第一步:创建普通java项目

​ 参照创建maven的java项目步骤进行创建。

第二步:配置打包方式

​ web项目的打包方式为war,打开maven项目的pom文件。在项目的坐标信息下添加标签,设置打包方式。

在这里插入图片描述

【import Changes】

在这里插入图片描述

第三步:配置webapp目录和web.xml

打开Project Structure 视图

在这里插入图片描述

新增web.xml文件:按照数字图标的顺序操作

在这里插入图片描述

设置web.xml的路径 :点击web.xml后会自动弹出一个窗口设置路径

在这里插入图片描述

点击Apply,OK即可:

在这里插入图片描述

第四步:创建完成

​ 设置完成之后,main目录下会创建webapp-WEB-INF-web.xml。

在这里插入图片描述

3.2 发布web项目
第一步:Edit Configurations

在这里插入图片描述

第二步:添加local tomcat

​ 按照下图数字图标顺序操作: + --> Tomcat Server --> Local

在这里插入图片描述

第三步:配置tomcat

在这里插入图片描述

第四步:启动测试

​ 在webapp目录下新建一个hello.html文件,文件内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    <h1>Hello Maven!</h1>
</body>
</html>

​ 启动tomcat后,访问hello.html。如果能正确访问到hello.html。说明项目创建OK。

在这里插入图片描述

四、maven项目构建的生命周期

1、maven项目构建的生命周期

1.1 生命周期是什么

​ 在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。虽然大家都在不停地做构建工作,但公司和公司间,项目和项目间,往往使用不同的方式做类似的工作。

​ Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven从大量项目和构建工具中学习和反思,单后总结了一套高度完美的,易扩展的生命周期。这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。

​ 比如我们项目最常用的一套流程如下:

在这里插入图片描述

​ Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作,在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。

1.2 maven的三套生命周期

​ maven的生命周期不止这一套,总共分为3套,每套里面包含的事件如下

(1)clean:清理工作

pre-clean:执行一些在clean之前的工作

clean:移除上一次构建产生的所有文件

post-clean:执行一些在clean之后立刻完成的工作

(2)default:核心工作,例如编译,测试,打包,部署等

这里面的事件非常的多,如下图

在这里插入图片描述

对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍

(3)site:产生报告,发布站点等

pre-site:执行一些在生成站点文档之前的工作

site:生成项目的站点文档

post-site:执行一些在生成站点文档之后完成的工作,为部署做准备

site-deploy:将生成的站点文档部署到特定的服务器上

2、maven生命周期相关命令

​ 我们使用以下命令可以完成maven生命周期

mvn clean:调用clean生命周期的clean阶段,清理上一次构建项目生成的文件;
mvn compile :编译src/main/java中的java代码;
mvn test :编译并运行了test中内容 ;
mvn package:将项目打包成可发布的文件,如jar或者war包; 
mvn install :发布项目到本地仓库 ;
2.1、mvn clean

​ clean命令的作用是清理项目编译或打包后生成的文件,具体对应maven项目中的target目录;

在这里插入图片描述

2.2、mvn compile

​ compile命令的作用是编译src/main/java中的java代码编译成可直接运行的class文件。编译完成后maven项目会自动创建一个target目录来存储这些文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M3RkZy85-1632494143808)(img/1536462238225.png)]
在这里插入图片描述

2.3、mvn test

​ test命令的作用是编译并运行maven项目的src/test目录下的junit测试代码。

编译后生成的文件:

在这里插入图片描述

运行日志:

在这里插入图片描述

2.4、 mvn package

​ package命令是将项目打包成可以发布的包。maven项目常见的打包方式有两种,maven的java project会打成jar包。maven的web project会打成war包。打包完成后将生成的文件存放在target目录中。

在这里插入图片描述

2.5、 mvn install

​ install命令是将当前的项目打包并发布到本地仓库中,供本地的其他maven项目使用。项目发布的路径:**本地仓库路径/groupId/artifactId/
在这里插入图片描述

在这里插入图片描述

3、maven生命周期相关插件

​ maven的核心分发包只有几兆大小,核心包中仅仅定义了抽象的生命周期。生命周期的各个阶段都是由插件完成的,它会在需要的时候下载并使用插件,例如我们在执行mvn compile命令时实际是在调用maven的compile插件来编译java源码:

在这里插入图片描述

​ 我们使用IDEA创建maven项目后,就不需要再手动输入maven的命令来构建maven的生命周期了。IDEA给每个maven构建项目生命周期各个阶段都提供了图形化界面的操作方式。具体操作如下:

3.1 打开maven视图

​ 依次打开:View–》Tool Windows–》Maven Projects

在这里插入图片描述

打开IDEA编辑区右侧:Maven Projects会弹出如下窗口,打开窗口中的Lifecycle即可看到相关命令。

在这里插入图片描述

3.2 执行命令

​ 双击Lifecycle下的相关命令图标即可执行对应的命令。

五、maven应用详解【重点】

​ maven是一个项目管理工具,他的作用:1.构建项目及项目的生命周期;2.依赖管理;3.插件管理;

1、pom配置详解

​ pom(Project Object Model)指的是项目对象模型,用来描述当前的maven项目。使用pom.xml文件来实现。

【补充】

​ setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。

pom.xml

<?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.heima.maven</groupId>
    <artifactId>maven-web2</artifactId>
    <version>1.0-SNAPSHOT</version>
  	<packaging>war</packaging>
</project>

【pom文件详解】

1. <project> :pom文件的根节点;
2. <modelVersion>: 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,目前POM模型版本是4.0.0;
3. <groupId> :maven项目组织id标识符,一般是公司域名倒过来写;
4. <artifactId>:项目的标识符--项目名。
5. <version>:项目的版本号;
6. <packaging>:maven项目的打包方式一般配置jar或者war;

2、依赖管理【重点】

​ Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。

2.1 Maven坐标

​ Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。坐标的定义元素如下:

  1. groupId:定义当前项目(jar包)隶属的实际项目组。
  2. artifactId:定义当前项目(jar包)的名称;
  3. version:定义当前项目(jar包)的版本号;

通过上面三个参数我们就能够确定一个唯一版本号的jar包。

在这里插入图片描述

2.2 依赖导入
1、从本地仓库中导入(注意:只能搜索到已下载到本地的jar包):

​ IDEA中给我们提供了一种搜索jar包的方式,帮助我们快速导入jar包。使用方法如下:

  1. 第一步:鼠标光标移入到在pom.xml文件中,按Alt+Insert键。会弹出一个选择框:

在这里插入图片描述

  1. 选择Dependency后会弹出一个搜索框:输入要添加的jar包的名字

在这里插入图片描述

​ 选择需要的jar包后按回车键即可自动添加此依赖;

在这里插入图片描述

2、从远程仓库中获取坐标:

​ 如果我们导入的依赖本地仓库中没有,使用IDEA搜索就搜索不到了,我们需要从网络中查找这个依赖的坐标,然后将其添加到pom文件中。添加完成之后,maven会帮我们从私服或中央仓库中下载该依赖。

​ 搜索依赖坐标的方法:

  1. 在中央仓库中查找:http://mvnrepository.com/

在这里插入图片描述

在这里插入图片描述

​ 将以下坐标复制到pom文件中即可:

在这里插入图片描述

​ pom文件中引入依赖后,会去私服或者中央仓库中下载依赖:如果项目结构的External Librarites中出现刚引入的依赖,则说明依赖引入成功。

在这里插入图片描述

私服

1. 阿里云:   <https://maven.aliyun.com/mvn/search>
2. 传智: http://192.168.50.22:8081/nexus

大家直接把资料中的repository.rar解压和自己的本地仓库合并

3、依赖配置

​ 我们通过坐标引入需要的依赖之后,有时候不能直接使用当前的依赖。需要对这些依赖进行配置。这些配置包括:依赖范围设置依赖版本维护

3.1 依赖范围设置

依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围

这里的范围主要是指以下三种范围

(1)主程序范围有效(src/main目录范围内)

(2)测试程序范围内有效(src/test目录范围内)

(3)是否参与打包(package指令范围内)

此外:scope标签的取值有四种:compile,test,provided,runtime

这四种取值与范围的对应情况如下:

在这里插入图片描述

指定依赖范围的方法

​ 我们在导入依赖的时候,在标签中使用设置即可,如下所示:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.3.9.RELEASE</version>
  <!--compile是默认的依赖范围,可以不用写出来-->
  <scope>compile</scope>
</dependency>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
     <scope>provided</scope>
</dependency>

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.0.8</version>
  <scope>runtime</scope>
</dependency>

3.2 依赖版本维护

​ 如果pom文件中引入的依赖太多,各种依赖又有不同的版本,为了统一维护版本。我们可以将依赖的版本号抽取出来进行统一管理。抽取方法如下:

第一步 :在pom.xml中使用属性定义jar包的版本

 <properties>
        <junit.version>4.13</junit.version>
        <mybatis.version>3.4.5</mybatis.version>
    </properties>

第二步 :在依赖的中使用${}引入前面定义好的版本


    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
            <scope>compile</scope>
        </dependency>
   </dependencies>

好处:方便对项目中使用的jar包版本的统一管理。

4、maven插件

插件, 外挂(plugin) : 指定的系统平台的补充性程序, 脱离平台不能单独运行

​ 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。例如编译源代码是由maven-compiler-plugin完成的,但是这些插件都是maven默认的插件,如果需要配置自己的插件,则需要通过插件的坐标来引入插件。插件的坐标可以从maven官方提供的插件列表进行下载:

Maven官方有两个插件列表:

第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html。

第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html。

常用的插件有编译插件和tomcat插件,这两个插件的坐标及配置如下:

4.1 编译插件 maven-compiler-plugin

如果在settings.xml设置过了,就不需要这个插件

  1. settings.xml 的设置是以后所有的项目都生效
  2. 插件配置当前项目中,只对当前项目生效

maven运行默认使用1.5版本JDK, 我们需要换成1.8

<build>
        <plugins>
            <!--JDK编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
4.2 测试插件maven-surefire-plugin

maven的test指令运行测试代码存在中文乱码问题, 用这个插件可以解决

<!--test插件-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.16</version>
  <configuration>
    <forkMode>once</forkMode>
    <argLine>-Dfile.encoding=UTF-8</argLine>
  </configuration>
</plugin>
4.3 tomcat插件

我们可以使用本地安装的tomcat,也可以使用tomcat插件来运行我们的项目

 		<!-- tomcat7插件
                port : 端口
                path : 当前项目的虚拟路径
            -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>80</port>
                    <path>/web-xx</path>
                </configuration>
            </plugin>

需要进行如下配置 : 重置配置一个tomcat

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

4.4 插件完整配置

​ 所有的插件必须配置在–>中

 <build>
        <plugins>
            <!--JDK编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--test插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <forkMode>once</forkMode>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                </configuration>
            </plugin>
            <!-- tomcat7插件 -->
            <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>
 </build>

六、综合练习【重点】

​ 需求:将《用户管理系统》改成maven的web项目;

​ 要求:分别配置本地tomcat启动和插件启动tomcat。

1、创建maven的web项目

  • 第一步:创建maven的web项目,并配置webapp和web.xml;

在这里插入图片描述

  • 第二步:修改pom文件中打包方式为war;

在这里插入图片描述

2、复制用户管理系统代码到本项目

  • 第一步:复制静态页面到webapp目录下:

在这里插入图片描述

  • 第二步:复制java代码到src/main/java目录中:

  • 第三步:将原项目src目录下的配置文件全部复制到maven项目的resources目录中():

    注意,如果要在resources下创建目录 : com/itheima/dao(directory) 之类的, 千万别写 com.itheima.dao(package)

在这里插入图片描述

3、对照原项目jar包导入依赖

 <dependencies>

        <!--servlet3.0-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--commons-beanutils-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.3</version>
        </dependency>
        <!--commons-logging-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>

        <!--jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
            <scope>runtime</scope>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.4</version>
        </dependency>
    </dependencies>

4、给依赖添加作用域

  1. servlet: provided;
  2. mysql驱动:runtime;

在这里插入图片描述

在这里插入图片描述

5、配置tomcat启动

在这里插入图片描述

6、配置插件

添加编译插件:

<build>
    <plugins>
        <!--JDK编译插件-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
              <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

附一:完整的pom.xml配置

<?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.heima.maven.usermanager-maven</groupId>
    <artifactId>usermanager-maven</artifactId>
    <version>2.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <!--统一管理依赖版本-->
    <properties>
        <c3p0.version>0.9.1.2</c3p0.version>
        <beanutils.version>1.8.3</beanutils.version>
        <commons.logging.version>1.1.1</commons.logging.version>
        <fastjson.version>1.2.47</fastjson.version>
        <servlet.version>3.0.1</servlet.version>
        <jstl.version>1.2</jstl.version>
        <mysql.connector.version>5.1.18</mysql.connector.version>
    </properties>

    <dependencies>
        <!--c3p0-->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>
        <!--commons-beanutils-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${beanutils.version}</version>
        </dependency>
        <!--commons-logging-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${commons.logging.version}</version>
        </dependency>
        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <!--servlet3-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>

        <!--jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.version}</version>
            <scope>runtime</scope>
        </dependency>
        <!--mybatis-->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.2.8</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.6.4</version>
        </dependency>
        	 <!--jedis-->
         <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.8.1</version>
        </dependency>
        	 <!--Junit测试框架-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>RELEASE</version>
        </dependency>
        	 <!--JackSon-->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.9.4</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.4</version>
        </dependency>
    </dependencies>

    <!--设置插件-->
    <build>
        <plugins>
            <!--JDK编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--测试插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                    <forkMode>once</forkMode>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                </configuration>

            </plugin>
             <!-- tomcat7插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--
                        解决get请求乱码
                    -->
                    <uriEncoding>utf-8</uriEncoding>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

附二:清理maven仓库

​ 初始情况下,我们的本地仓库是没有任何jar包的,此时会从私服去下载(如果没有配置,就直接从中央仓库去下载),可能由于网络的原因,jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾。此时,maven可能不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件。如果本地仓库中有很多这样的以lastUpadted结尾的文件,可以执行如下脚本来删除:

在这里插入图片描述

在这里插入图片描述

在上面的bat文件上右键—》编辑 。修改文件:

在这里插入图片描述

修改完毕后,双击运行即可删除maven仓库中的残留文件。

附三:更新依赖索引

​ 有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下:

打开设置----搜索maven----Repositories----选中本地仓库-----点击Update

在这里插入图片描述

七、小结

  1. 会使用IDEA创建maven的java项目和web项目;
  2. 会使用maven引入依赖;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51297617/article/details/120464376

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签