Maven day01

Maven day01

1 Maven简介

项目开发过程中除了关键的编码配置部分,还需要搭建项目开发环境(创建项目结构,管理依赖…)。Maven是apache组织孵化提供的开发的项目构建工具,简化项目构建的过程。

传统的项目开发过程中存在的问题:

  • 不同的集成开发工具(eclipse、MyEclipse、IDEA)有不同的项目目录结构。直接使用集成开发工具创建项目,项目结构和开发工具绑定,不利于团队的开发工具的升级。
  • 手动管理依赖:麻烦,后期依赖升级管理非常困难。

解决方案:使用项目构建工具 Maven

2 Maven的安装

  1. 解压缩apache-maven-3.x.x-bin.zip,将解压缩后的文件放到非中文路径下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ux5J2VQQ-1627219850313)(Maven day01.assets/image-20200421105252407.png)]

  2. 将.m2文件夹直接复制到C:/用户/{当前用户名}文件夹

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1pkvg5B-1627219850315)(Maven day01.assets/image-20200421110114990.png)]

  3. 配置环境变量

    JAVA_HOME=C:\Program Files\Java\jdk1.8.0_192
    M2_HOME=D:\apache\apache-maven-3.6.3
    Path=原来其它值;%M2_HOME%\bin
    
  4. 验证安装是否成功

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFzPvZtn-1627219850316)(Maven day01.assets/image-20210601145110754.png)]

    注意:以管理员身份运行cmd,输入mvn -version

3 Maven的项目结构

+项目名
	+src	//存放源代码+配置文件
		+main //存放主要的功能代码+配置文件
			+java //存放功能代码
			+resources //存放配置文件
			+webapp //web项目独有,类似于eclipse的WebContent目录
		+test //存放测试的代码+配置文件
			+java //存放测试文件
			+resources //存放测试时的配置文件
	+target //存放编译后class文件
	-pom.xml //Project Object Model 配置项目的基本信息

4 Idea下使用Maven

4.1 Idea下关联Maven

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbxQl5Tm-1627219850317)(Maven day01.assets/1622445564746.png)]

4.2 Idea下创建Maven web项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5s91h2RO-1627219850318)(Maven day01.assets/1622446401914.png)]

解决web项目结构不完整:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uws2tIEf-1627219850318)(Maven%20day01.assets/image-20210601150212410.png)]

修改项目编解码方式和JDK版本:(修改后一定要再次刷新项目)

<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.baizhi</groupId>
  <artifactId>maven-web</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <!-- 项目参数配置 -->
  <properties>
	<!-- 项目的编码方式-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!-- jdk版本 -->
	<maven.compiler.source>8</maven.compiler.source>
	<maven.compiler.target>8</maven.compiler.target>
  </properties>
  
  
</project>

注意:添加配置后,需要刷新Maven项目。

5 将Idea的Web项目转变为Maven Web项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o4EfHz5U-1627219850319)(Maven%20day01.assets/image-20210608110310812.png)]

注意:WEB-INF下的lib目录不要再复制,如果复制,仍是手动的管理依赖。

6 Maven的依赖管理

之前项目中手动依赖管理的问题:

  • 操作繁琐
  • 管理困难

解决方案:Maven自动依赖管理。

6.1 Maven项目的坐标

坐标的组成:

<groupId>公司或组织名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
<packaging>打包方式(项目类型)
			jar:普通的java项目
    		web:web项目
</packaging>

每一个Maven项目都会有属于自己的唯一的坐标。通过Maven坐标可以在互联网上唯一的标识一个项目。

6.2 依赖管理的思路

一个A项目开发、运行时需要使用另外一个B项目的开发结果(jar),那么A依赖于B。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VmleFEjg-1627219850320)(Maven day01.assets/image-20200421160343810.png)]

具体操作:就是在项目的pom.xml中通过dependency标签声明项目依赖的jar报的坐标,Maven会根据坐标自动从Maven仓库中获取依赖。

6.3 实战

原来手动管理的依赖,替换为pom.xml中dependency配置。可以通过Maven官方提供的搜索服务搜索jar包的坐标。

Maven会自动分析传递依赖,在我们自己的项目的pom.xml中,只需要声明直接依赖的jar的坐标即可。

<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.baizhi</groupId>
  <artifactId>maven-web</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <!-- 项目参数配置 -->
  <properties>
	<!-- 项目的编码方式-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!-- jdk版本 -->
	<maven.compiler.source>8</maven.compiler.source>
	<maven.compiler.target>8</maven.compiler.target>
  </properties>
  
  <dependencies>
  	<!-- JUnit测试依赖 -->
  	<!-- https://mvnrepository.com/artifact/junit/junit -->
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.12</version>
	    <scope>test</scope>
	</dependency>
  	
  	<!-- 数据库相关依赖 -->
  	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
  	
  	<!-- hutool工具类 -->
  	<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
	<dependency>
	    <groupId>cn.hutool</groupId>
	    <artifactId>hutool-all</artifactId>
	    <version>5.2.3</version>
	</dependency>
  	
  	<!--  servlet + jsp + jstl 依赖 -->
  	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
	
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>4.0.1</version>
	    <scope>provided</scope>
	</dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
	
	<dependency>
	    <groupId>javax.servlet.jsp</groupId>
	    <artifactId>javax.servlet.jsp-api</artifactId>
	    <version>2.3.3</version>
	    <scope>provided</scope>
	</dependency>
	<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
	<!-- https://mvnrepository.com/artifact/jstl/jstl -->
	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
    

  </dependencies>
</project>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PLzE5z2x-1627219850320)(Maven%20day01.assets/image-20210609104037724.png)]

注意:Maven的web项目和普通web项目的部署访问方式没有区别。

6.4 properties抽取版本号

为了方便依赖版本号的管理,可以在properties中自定义标签声明版本号,然后在version标签中通过${标签名}的方法引用版本号。方便再properties中统一管理版本号。

<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.baizhi</groupId>
  <artifactId>maven-web</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <!-- 项目参数配置 -->
  <properties>
	<!-- 项目的编码方式-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!-- jdk版本 -->
	<maven.compiler.source>8</maven.compiler.source>
	<maven.compiler.target>8</maven.compiler.target>
    <!-- 自定义标签声明版本号-->
      <junit.version>4.12</junit.version>
      <mysql.version>8.0.23</mysql.version>
      <hutool.version>5.2.3</hutool.version>
      <servlet.version>4.0.1</servlet.version>
      <jsp.version>2.3.3</jsp.version>
      <jstl.version>1.2</jstl.version>
  </properties>
  
  <dependencies>
  	<!-- JUnit测试依赖 -->
  	<!-- https://mvnrepository.com/artifact/junit/junit -->
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>${junit.version}</version>
	    <scope>test</scope>
	</dependency>
  	
  	<!-- 数据库相关依赖 -->
  	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
  	
  	<!-- hutool工具类 -->
  	<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
	<dependency>
	    <groupId>cn.hutool</groupId>
	    <artifactId>hutool-all</artifactId>
	    <version>${hutool.version}</version>
	</dependency>
  	
  	<!--  servlet + jsp + jstl 依赖 -->
  	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
	
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>${servlet.version}</version>
	    <scope>provided</scope>
	</dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
	
	<dependency>
	    <groupId>javax.servlet.jsp</groupId>
	    <artifactId>javax.servlet.jsp-api</artifactId>
	    <version>${jsp.version}</version>
	    <scope>provided</scope>
	</dependency>
	<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
	<!-- https://mvnrepository.com/artifact/jstl/jstl -->
	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>${jstl.version}</version>
	</dependency>
     
  </dependencies>
</project>

7 Maven的生命周期

Maven的生命周期就是指Maven项目从项目初始化到部署的完整过程。包含着项目的清理、校验、编译、测试、打包、检查、安装、发布等多个阶段。

  1. clean清理阶段

    清理上一次构建生成的文件,会将target文件夹删除
    
  2. validate校验阶段

    验证工程是否正确,所有需要的资源是否可用。
    
  3. compile编译阶段

    编译项目的源代码
    
  4. test测试阶段

    执行test/java下的测试代码
    
  5. package打包阶段

    将项目打包后jar或者war
    
  6. verify检查阶段

    运行所有检查,验证包是否有效且达到质量标准。
    
  7. install安装阶段

    把包安装到maven本地仓库,可以被其他工程作为依赖来使用
    
  8. site 生成站点文档阶段

    生成项目站点文档
    
  9. deploy 发布阶段

    将项目站点发布到服务器
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4WQTAmv-1627219850321)(Maven%20day01.assets/image-20210601153357039.png)]

在Idea的Maven工具栏,找到Lifecycle,双击即可执行对应的阶段。最常执行的是clean、和compile以及package阶段。

8 Maven仓库

通过Maven工具开发的项目、插件…统称为Maven构件。存放Maven项目结果(构件)的地方,称之为Maven仓库。

Maven仓库的分类:

  • 本地仓库
  • 远程仓库

8.1 本地仓库

本地仓库:位于本机的Maven仓库,mvn install将jar包安装到本地仓库,默认位置为.m2/respository。

.m2/settings.xml修改本地仓库的位置
 <localRepository>E:/repository</localRepository>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qy4LVert-1627219850322)(Maven day01.assets/image-20200421172106385.png)]

注意:如果修改本地仓库,Idea中的项目需要手动刷新下项目才能识别。

8.2 远程仓库

远程仓库:位于网络上的仓库,必须通过网络访问。

8.2.1 中央仓库

中央仓库:Maven官方提供的远程仓库。还有会一些公司或组织维护的仓库,是中央仓库有力的补充。可以在中央仓库提供的搜索服务中搜索需要的jar包。

8.2.2 镜像

镜像:网络上B仓库提供了A仓库相同的内容,那么称B是A的镜像。中央仓库假设国外,国内使用不太方面,阿里云提供了中央仓库的镜像。

settings.xml设置使用阿里云镜像:

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
  -->
	<mirror>
		 <id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
	
 </mirrors>
8.2.3 私服

私服:假设在局域网中的Maven仓库,它本身可以代理互联网上的远程仓库(一般代理中央仓库或者阿里云镜像),为局域网中Maven用户提供服务。

私服的好处:

  • 节省网络带宽,更稳定
  • 加强权限控制

8.3 Maven仓库的使用顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e3E7LlPK-1627219850322)(Maven day01.assets/image-20200421174829103.png)]

顺序:本地–>私服–>镜像–>中央仓库

注意:

  • 一旦在某一步找到需要的依赖,立刻返回。
  • 本地仓库和中央仓库一定是有的,但是私服和镜像会根据公司情况有所删减。

9 Maven下开发Web项目步骤

  1. 搭建开发环境

    1. 新建web项目

      参考4.2 操作

      注意:1.补全项目结构 2.修改编解码方式和jdk版本

    2. 导入依赖

      在pom.xml中通过配置引入依赖,复制粘贴笔记内容,参考6.3实战。

    3. 导入工具类+配置文件

      工具类:src/main/java目录下 com.baizhi.util包里

      配置文件:src/main/resources目录下

      jdbc.properties

  2. 建表

  3. 实体类 src/main/java

  4. dao src/main/java

  5. service src/main/java

  6. test src/test/java

  7. controller+jsp

    controller: src/main/java

    jsp: src/main/webapp

作业:将之前的web项目修改为Maven web项目。

注意:1.补全项目结构 2.修改编解码方式和jdk版本

  1. 导入依赖

    在pom.xml中通过配置引入依赖,复制粘贴笔记内容,参考6.3实战。

  2. 导入工具类+配置文件

    工具类:src/main/java目录下 com.baizhi.util包里

    配置文件:src/main/resources目录下

    jdbc.properties

  3. 建表

  4. 实体类 src/main/java

  5. dao src/main/java

  6. service src/main/java

  7. test src/test/java

  8. controller+jsp

    controller: src/main/java

    jsp: src/main/webapp

作业:将之前的web项目修改为Maven web项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值