MAVEN基本概念

2 minute read

1.JAVA技术

JAVA

2.开发中存在的问题

  1. 一个项目就是一个工程
    • 借助Maven将一个项目拆分成多个项目
  2. 项目中jar包需要手动复制到WEB-INF/lib目录下
    • 借助Maven将jar包保存在仓库中,工程只需要引用这个文件接口
  3. 借助Maven以一种规范的方式下载jar包,知名框架和第三方工具jar包以及按照统一的规范存放在Maven中央仓库中。
  4. 一个jar包依赖其他jar包,需要手动加入项目
    • Maven自动将被依赖jar包导入。

3.Maven

Maven服务于JAVA平台的自动化构建工具

  • 服务JAVA
  • 自动化
  • 构建工具

历程:Make > Ant > Maven > Gradle

构建:以java源文件、框架配置文件、JSP、HTML 、图片等资源为原材料,去生产一个可以运行的项目的过程

  • 编译
  • 部署
  • 搭建

4.运行时环境

JAVA

开发过程,所有的路径或配置文件中配置的类路径等都是以编译结果的目录结构为标准的。

5.部署

实际项目中整合第三方框架,WEB工程中除了JAVA程序和JSP页面、图片等静态资源之外,还包括第三方框架的jar包以及各自各样的配置文件。所有这些资源都必须安装正确的目录结构部署到服务器上,项目才可以运行。

6.自动化构建

构建环节:

  • 清理:将以前编译得到的旧class字节码文件删除,为下一次编译准备
  • 编译:将java源程序编译成class字节码文件
  • 测试:自动测试,自动调用junit程序
  • 报告:测试程序执行的结果
  • 打包:动态web工程打war包,java工程打jar包
  • 安装:maven特定的概念–将打包得到的文件复制到仓库的指定位置
  • 部署:将动态web工程生成的war包复制到Servlet容器指定目录下,使其可以运行

7.部署Maven(自动化构建)

  1. 检查JAVA_HOME环境变量
echo %JAVA_HOME%

JAVA_HOME:C:\Program Files\Java\jdk1.7.0_80
PATH:;%JAVA_HOME%\bin
CLASSPATH:.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar

C:\Windows\system32>java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
  1. 解压Maven核心程序压缩包,放到非中文无空格路径

  2. 配置Maven相关环境变量
    • MAVEN_HOME
    • M2_HOME D:\DevInstall\apache-maven-3.6.3
  3. 配置path
    • path D:\DevInstall\apache-maven-3.6.3\bin
  4. mvn -v

http://maven.apache.org/download.cgi

Maven核心概念

  • 约定的目录结构
  • POM
  • 坐标
  • 依赖
  • 仓库
  • 生命周期/插件/目标
  • 继承
  • 聚合

vs code环境:

  • 1.下载并装好java sdk
    • 设好环境变量:JAVA_HOME,PATH,CLASSPATH
    • 装好后在命令行验证:java -version
  • 2.下载并安装maven
    • 设好环境变量:PATH
    • 装好后在命令行验证:mvn -v
  • 3.安装vs code插件
    • Language Support for Java(TM) by Red Hat:通过 Eclipse ™ JDT Language Server 提供 Java 语言支持
    • Debugger for Java:基于 Java Debug Server 的轻量级调试工具。
    • Java Test Runner:执行和调试 Java 测试用例。
    • Maven for Java:Maven 插件。
  • 4.创建maven项目
    • 按下 Ctrl+Shift+P 打开命令面板,执行 Generate from Maven Archetype 命令  
    • 在弹出的对话框中选择一个生成项目的目录,接着选择基于 maven-archetype-quickstart 创建
    • 选择完成后,会开始项目的生成,期间需要在终端中填入必要的信息。groupId组织名,artifactId项目名,version版本号,package打包后jar的名称,
  • 5.调试
    • 创建完成后,打开目录即可
    • Ctrl+Shift+D可打开调试面板,进行调试

8.约定的目录结构说明

  • [1] 根目录:工程名
  • [2] src目录:源码
  • [3] pom.xml文件:Maven工程的核心配置文件
  • [4] main目录:存放主程序
  • [5] test目录:存放测试程序
  • [6] java目录: 存放Java源文件
  • [7] resources目录:存放框架或其他工具的配置文件
Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml
  • Maven负责自动化构建,以编译为例,自动编译,必须知道java源文件保存在什么位置
  • 自定义的内容需要让框架或工具知道
    • 以配置方式明确告诉框架
    • 遵守框架内部已存在的约定
  • 约定>配置>编码

9.创建测试环境

10.Maven插件仓库

  • Maven的核心程序中仅仅定义了抽象的生命周期,但具体工作必须有特定插件完成。
  • 当执行Maven命令需要某些插件时,核心程序首先在本地仓库中查找
  • 本地仓库默认位置:系统中当前用户家目录.m2\repository
  • 如果找不到,自动中央仓库下载
  • 无法联网,构建失败
  • 修改本地仓库目录 maven目录\conf\settings.xml
    • localRepository标签
    • 复制出注释

11.常用Maven命令

  • 执行与构建(编译、测试、打包…..)相关命令,必须进入pom.xml所在目录
  • mvn clean 清理
  • mvn compile 编译主程序
  • mvn test-compile 编译测试程序
  • mvn test 执行测试
  • mvn package 打包
  • mvn install 安装
  • mvn site 生成站点

12.POM

  • Project Object Mode 项目对象模型
  • pom.xml 核心配置文件

13.坐标

下面三个向量在仓库中唯一定位一个maven工程

  • 1.groupid 公司或组织域名倒序+项目名
    • com.atguigu.maven
  • 2.artifactid 模块名
    • Hello
  • 3.version 版本
    • 1.0.0

坐标与仓库路径对应关系

org.springframework sprint-core 4.0.0.RELEASE

org/springframework/sping-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

14.仓库

  • 本地仓库
  • 远程仓库
    • 私服 Nexus
    • 中央仓库
    • 中央仓库镜像

仓库中内容

  • Maven 插件
  • 第三方框架或工具的jar包
  • 自己开发的Maven仓库

15.创建测试环境

16.依赖

mvn compile

[ERROR] Failed to execute goal on project HelloFriend: Could not resolve dependencies for project com.atguigu.maven:HelloFriend:jar:0.0.1-SNAPSHOT: Could not find artifact com.atguigu.maven:Hello:jar:0.0.1-SNAPSHOT -> [Help 1]

Maven解析依赖到本地仓库查找依赖jar包

  • 对自己开发Maven工程,使用mvn install 进入仓库

17.依赖范围

compile
  • compile
    • 对主程序是否有效:有效
    • 对测试程序是否有效:有效
    • 是否参与打包:参与
    • 是否参与部署:参与
    • 典型例子:sping-core
  • test
    • 对主程序是否有效:无效
    • 对测试程序是否有效:有效
    • 是否参与打包:不参与
    • 是否参与部署:不参与
    • 典型例子:junit
  • provided
    • 对主程序是否有效:有效
    • 对测试程序是否有效:有效
    • 是否参与打包:不参与
    • 是否参与部署:不参与
    • 典型例子:servlet-api.jar

18.生命周期

构建过程中的环节

  1. 清理:删除旧的class字节码文件
  2. 编译:将源程序编译成class字节码文件
  3. 测试:自动测试,自动调用junit程序
  4. 报告:
  5. 打包:动态web工程打war包,java工程打jar包
  6. 安装: Maven将打包文件复制到仓库中
  7. 部署:将动态web工程war包复制到servlet容器指定目录下,使其可以运行
  • Maven各个构建环节执行顺序,不能打乱
  • Maven核心程序定义了抽象的生命周期,各个环节有插件完成
  • Maven核心程序为了更好自动化构建,按照以下特点执行生命周期中各个阶段:不论执行哪一个阶段,都从生命周期最初的位置开始执行
  • 插件和目标
    • 生命周期各个阶段仅定义了要执行什么任务
    • 各个阶段和插件的目标是对应的
    • 相似的目标有特定的插件完成

19.Eclipse插件设置

Eclipse配置

  1. Preferences > Maven > Installations > add 默认内嵌一个低版本Maven,指定最新版本Maven核心程序位置

  2. Preferences > Maven > User Settings 指定conf/setting.xml,获取本地仓库位置

20.Eclipse创建maven版java程序

增加菜单 Customize Perspective > Menu Visibility > Maven Project

运行时环境 修改为jdk1.7

		[1]打开settings.xml文件
		[2]找到profiles标签
		[3]加入如下配置
			<profile>
				<id>jdk-1.7</id>
				<activation>
					<activeByDefault>true</activeByDefault>
					<jdk>1.7</jdk>
				</activation>
				<properties>
					<maven.compiler.source>1.7</maven.compiler.source>
					<maven.compiler.target>1.7</maven.compiler.target>
					<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
				</properties>
			</profile>

Java工程 Maven Project > new > simple project > 填写坐标,打包方式jar

21. Eclipse执行maven命令

pom.xml > run as > maven build… > Goals 填写compile

New Java Class > package:com.atguigu.com Name:Good

22. Eclipse创建web工程

Maven Project > new > simple project > 打包方式 war

选中工程 > Properties > Project Facets > Dynamic Web Module 取消勾选 应用 > 勾选 > Further configuration available… > Content directory > 填写 src/main/webapp > Generate web.xml deployment descriptor 生成web.xml 勾选 > 应用

23. servlet-api

Eclipse做法:

Build Path > Add Library > server Runtime > apache tomcat v6.0

maven做法:修改pom.xml

javax.servlet servlet-api 2.5 provided

Run As > Run on Server

24.jar包之间的冲突

增加jsp-api javax.servlet.jsp jsp-api 2.1.3-b06 provided 注意中间件自己有jsp-api,如果范围写成了compile,则部署的jar包与中间件的jar包冲突,会有翻译相关的报错java.lang.NullPointerException

25. Eclipse导入Maven工程

Import > Maven > Existing Maven Projects