目录

  • 前言
  • 1. 安装及配置
  • 2. 核心概念
    • 2.1 约定的目录结构
    • 2.2 编译执行
    • 2.3 仓库
    • 2.4 pom文件
    • 2.5 常用命令
    • 2.6 生命周期以及插件
    • 2.7 单元测试junit
  • 3. 结合idea
    • 3.1 设置maven
    • 3.2 新建javase项目
    • 3.3 创建web工程
    • 3.4 常用技巧
  • 4. 其他细节信息
    • 4.1 依赖范围
    • 4.2 常用属性
    • 4.3 资源插件

前言

了解Maven的具体概念、功能、具体执行步骤以及如何搭建等
本地仓库资源

Maven 具体功能:
maven 是自动化构建工具,可以部署项目;管理jar文件,自动下载jar、文档和源代码;管理jar直接的依赖以及版本;编译程序,把java编译为class;测试代码是否正确;打包文件,形成jar文件或者war文件

具体构建步骤:
构建是面向过程,主要步骤是

  1. 清理:把之前项目编译的东西删除掉,为新的编译代码做准备。
  2. 编译: 把程序源代码编译为执行代码, 把java编译成class文件且是批量的,maven可以同时把成千上百的文件编译为class。这与javac 不一样,javac一次编译一个文件。
  3. 测试: maven可以执行测试程序代码,验证你的功能是否正确。批量的,maven同时执行多个测试代码,同时测试很多功能。
  4. 报告: 生成测试结果的文件,具体文件是测试有无通过。
  5. 打包: 项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件, 通常java程序,压缩文件是jar扩展名的。对于web应用,压缩文件扩展名是.war
  6. 安装: 把5中生成的文件jar,war安装到本机仓库
  7. 部署: 把程序安装好可以执行。

核心概念:
POM :名称是pom.xml(项目对象模型)
maven把一个项目当做一个模型使用
控制maven构建项目的过程,管理jar依赖。

约定的目录结构 : maven项目的目录和文件的位置都是规定的。

坐标 : 是一个唯一的字符串,用来表示资源的。

依赖管理 : 管理项目可以使用jar文件

仓库管理(了解) :资源存放的位置

生命周期 (了解) : maven工具构建项目的过程
插件和目标(了解):执行maven构建的时候用的工具是插件
⑧继承
⑨聚合

1. 安装及配置

  1. 从maven的官网下载maven的安装包
  2. 解压安装包,解压到一个目录,非中文目录
  • 子目录 bin :执行程序,主要是mvn.cmd
  • conf :maven工具本身的配置文件 settings.xml
  1. 配置环境变量

    在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录,bin之前的目录

    再把M2_HOME加入到path之中,在所有路径之前加入 %M2_HOME%\bin;

  2. 验证,新的命令行中,执行mvn -v

    注意:需要配置JAVA_HOME ,指定jdk路径

具体maven的配置可看我上一篇的文章进行了解
Maven详细配置(全)

2. 核心概念



2.1 约定的目录结构

每一个maven项目在磁盘中都是一个文件夹(项目-Hello)
Hello/
—/src
------/main #主程序java代码和配置文件
----------/java #程序包和包中的java文件
----------/resources #java程序中要使用的配置文件
------/test #测试程序代码和文件的(可以没有)
----------/java #测试程序包和包中的java文件
----------/resources #测试java程序中要使用的配置文件
—/pom.xml #maven的核心文件(maven项目必须有)

类似这样的目录结构,以树为结构

2.2 编译执行

  • 在cmd命令行下运用mvn compile进行编译,编译src/main目录下的所有java文件的
  • cmd下的命令行会出现多个下载文件Downloading:https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin等等是因为第一次mvn会下载多个插件,maven工具执行的操作本身需要很多插件(java类,以jar文件结尾)来完成,插件是完成某些具体功能,下载插件的网址涉及中央仓库,后续核心概念会讲到。
  • 下载后的插件具体位置放于默认本地仓库中
    C:\Users\86135\.m2
    仓库具体的具体

编译成功之后会在项目的根目录下生成target
maven编译的java程序,最后的class文件都放在target目录中

2.3 仓库

仓库是存放maven使用的jar和我们项目使用的jar

仓库的分类可以分为本地仓库远程仓库

本地仓库是个人计算机上的文件夹,存放各种jar
设置本机存放资源的目录位置(设置本机仓库):

  1. 修改maven的配置文件/conf/settings.xml, 先备份 settings.xml
  2. 修改 localRepository 指定目录(不要使用中文目录)

远程仓库是在互联网上的,使用网络才能使用的仓库
远程仓库分为中央仓库、中央仓库的镜像和私服
中央仓库是共享一个集中仓库 。 https://repo.maven.apache.org :中央仓库的地址
中央仓库的镜像是中央仓库的备份, 在各大洲,重要的城市都是镜像
私服是用在局域网不对外公布

仓库的具体使用是不需要人为使用
具体如何运作仓库
比如需要使用mysql驱动,maven首先查本地仓库—>私服—>镜像—>中央仓库,如果某个阶段有,之后会类似递归一样返回调用

2.4 pom文件

  • pom是Project Object Model 项目对象模型
  • Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂
  • 项目打包的类型packaging,可以是 jar、war、rar、ear、pom,默认是 jar

基本信息有坐标依赖信息
1.坐标是唯一值在互联网中唯一标识一个项目的
项目在仓库中的位置是由坐标来决定的:groupId、artifactId 和 version 决定项目在仓库中的路径,artifactId 和 version 决定 jar 包的名称

<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定版本号</version>

具体搜索使用的中央仓库是
中央仓库地址
通过仓库搜索后的驱动配置(以jar包结尾)

2.packaging: 打包后压缩文件的扩展名,默认是jar ,web应用是war 。默认不写是jar包

3.依赖信息:项目中要使用的各种资源说明
dependencies 和dependency ,相当于是 java代码中import

<dependencies><!--依赖  java代码中 import --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.9</version></dependency>
</dependencies>

4.properties:设置属性

5.build : maven在进行项目的构建时, 配置信息,例如指定编译java代码使用的jdk的版本等

2.5 常用命令

通过命令,完成maven的生命周期的执行
maven可以使用命令,完成项目的清理,编译,测试等等

命令 功能
mvn clean 清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)
mvn compile 编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
mvn test-compile 编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
mvn test 测试(会生成一个目录surefire-reports,保存测试结果)
mvn package 打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)

2.6 生命周期以及插件

  • lifecycle为生命周期
  • plugins为插件
  • dependencies为依赖信息

maven的生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署

maven的插件: maven命令执行时,真正完成功能的是插件,插件就是一些jar文件, 一些类。

编译插件的配置

<build>
<!-- 配置插件--><plugins> <!-- 配置具体插件--><plugin> <groupId>org.apache.maven.plugins</groupId> <!-- 插件名称--><artifactId>maven-compiler-plugin</artifactId> <!-- 插件版本--><version>3.8.1</version> <!-- 配置插件的信息--><configuration> <!-- 代码运行在jdk1.8上--><source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins>
</build>

2.7 单元测试junit

单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。
测试的是类中的方法,每一个方法都是独立测试的, 方法是测试的基本单位(单元)
== maven借助单元测试,批量的测试你类中的大量方法是否符合预期的==

具体的使用步骤是在pom.xml文件中加入单元测试

 <!-- 单元测试 -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency>

推荐的创建类和方法的提示:

  1. 测试类的名称 是Test + 你要测试的类名
  2. 测试的方法名称 是:Test + 方法名称
    例如要测试HelloMaven ,创建测试类 TestHelloMaven
 @Testpublic void testAdd(){测试HelloMaven的add方法是否正确}

其中testAdd叫做测试方法,它的定义规则
1.方法是public的,必须的
2.方法没有返回值, 必须的
3.方法名称是自定义的,推荐是Test + 方法名称
4.在方法的上面加入 @Test

举个列子:
在main的函数中

public class HelloMaven {public int add(int n1,int n2){return n1+n2;}public static void main(String args[]){HelloMaven hello = new HelloMaven();int res = hello.add(10,20);System.out.println("10+20="+res);}
}

测试类应该这样书写

public class MyTest {@Testpublic void testAdd(){System.out.println("执行 HelloMaven 类 addNumber()方法");HelloMaven hello =new HelloMaven();int res = hello.add(n1,n2);// 期望值,实际值.如果两个值相等则为正确的,不等就会抛出异常,会出错Assert.assertEquals(30,res);} }

具体Assert.assertEquals的参数设置可以查看我上一篇文章
java之Assert.assertEquals详细分析

3. 结合idea

3.1 设置maven

idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。使用自个安装的maven,覆盖idea默认的设置,让idea指定maven的安装具体位置

  • Maven Home path: maven的安装目录
  • User Settings File : maven安装目录conf/setting.xml配置文件
  • Local Repository : 本机仓库的目录位置

修改设置为自已安装的maven

在将Runner设置jre为1.8且在VM Options中设置一个参数,参数为-DarchetypeCatalog=internal。新建的时候就回会比较快,是因为模式联网用maven的时候会下载一个7M的东西,添加参数会不下载且比较快。

配置以后的新工程设置都是maven的
在老版的idea中用file–other settings–Settings for New Project
在新版的idea中为

3.2 新建javase项目

具体idea版本不一样,界面稍微不太一样,不过大同小异
常用的目录结构已经创建好
使用模板创建maven项目,以下的模板没有resources


具体创建之后的目录结构为

蓝色为java文件,绿色为测试文件,添加后的resources需要设置为

讲解pom.xml的其他配置信息
以下为项目信息name以及通过网址访问的url项目,可用可不用

3.3 创建web工程

新建的项目默认目录是

需要新建一些java和resources的目录以及做一些标记

查看pom.xml下的文件
web下默认是war后缀的包

<groupId>org.example</groupId>
<artifactId>8.6ceshi</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
  • 以下的name为项目名,url为访问项目的网站,暂时没用到可以删除
  • 默认jdk为1.8,将其修改为1.8


以下build为插件的信息,即插件的管理。具体列出来与不列出来之后都会生成,主要是为了方便版本配置,可以删除
具体有清楚插件、资源插件、编译插件、生成报告插件、打包插件、安装插件、部署插件等

此时大概已经配置完毕


对比maven的好处:
以前写servlet的时候需要在dependencies中加入tomcat等信息

现在只需要用maven的管理即可,在pom.xml下加依赖信息即可
比如servlet和jsp的依赖信息

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

3.4 常用技巧

1. 刷新pom.xml
pom文件加入依赖后,有下划线,代表还未更新到,需要刷新
可以通过点击pom.xml右键进行刷新

或者在maven的项目中进行刷新


2.更新目录文件为测试或者跟目录权限等

或者点击工程目录中的

3.导入一个存在的项目

如果本身项目有pom.xml,则需设置为maven
在设置中进行添加模块

导入的项目为maven

jdk设置为1.8

4. 其他细节信息


4.1 依赖范围

有无此功能 compile test provided
对主程序是否有效
对测试程序是否有效
是否参与打包
是否参与部署

依赖范围:使用scope表示的
scope的值有 compile, test, provided ,默认是compile
使用的范围是在maven构建项目的那些阶段中起作用
maven构建项目 编译, 测试 ,打包, 安装 ,部署 过程(阶段)
比如

//该代码在test中才测试有效
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency>

如果是provided 则为提供者
代表编译测试用的jar包,但是项目进行打包安装的时候不需要这个jar包
比如下方的servlet包

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

4.2 常用属性

<properties> 设置maven的常用属性

在maven的全局变量中
可以自定义属性

  1. <properties> 通过自定义标签声明变量(标签名就是变量名)
  2. 在pom.xml文件中的其它位置,使用 ${标签名} 使用变量的值

自定义全局变量一般是定义 依赖的版本号, 当你的项目中要使用多个相同的版本号,先使用全局变量定义, 在使用${变量名}

比如以下这行代码

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
</properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>
</dependencies>

将其修改为全局变量,如果版本号一致的有多个,可以统一一起修改而不繁琐

<junit.version>4.11</junit.version><version>${junit.version}</version>

完整代码演示:


<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.11</junit.version>
</properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency>
</dependencies>

4.3 资源插件

  • 默认没有使用resources的时候, maven执行编译代码时, 会把src/main/resource目录中的文件拷贝到target/classes目录中,对于src/main/java目录下的非java文件不处理,不拷贝到target/classes目录中
  • 要想加入其他非java文件进行处理,需要添加以下代码,在build中加入其resources

把扩张名为xml和properties中都扫描到
并且之后生成都放到target/classes目录中

  <build><resources><resource><directory>src/main/java</directory><!--所在的目录--><includes><!--包括目录下的.properties,.xml 文件都会扫描到--><include>**/*.properties</include><include>**/*.xml</include></includes><!—filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 --><filtering>false</filtering></resource></resources></build>

Maven实战从入门到精通(全)相关推荐

  1. 原型设计大师:Axure RP网站与APP设计从入门到精通(全彩) 中文pdf扫描版

    原型设计大师:Axure RP网站与APP设计从入门到精通内容丰富且实用,由浅入深地传授了Axure 原型设计工具在网站和APP设计中的应用与技巧,并在文中贯穿了众多精彩实战案例.书中完整展现了多个鲜 ...

  2. 【Python】Python实战从入门到精通之七 -- 教你深入理解异常处理

    本文是<Python实战从入门到精通>系列之第7篇 [Python]Python实战从入门到精通之一 -- 教你深入理解Python中的变量和数据类型 [Python]Python实战从入 ...

  3. 【Python】Python实战从入门到精通之六 -- 教你读取文件

    本文是<Python实战从入门到精通>系列之第6篇 [Python]Python实战从入门到精通之一 -- 教你深入理解Python中的变量和数据类型 [Python]Python实战从入 ...

  4. 【Python】Python实战从入门到精通之五 -- 教你使用文件写入

    本文是<Python实战从入门到精通>系列之第5篇 [Python]Python实战从入门到精通之一 -- 教你深入理解Python中的变量和数据类型 [Python]Python实战从入 ...

  5. 【Python】Python实战从入门到精通之四 -- 教你使用Python中字典

    本文是Python实战–从入门到精通系列的第四篇文章: Python实战从入门到精通第一讲–Python中的变量和数据类型 Python实战从入门到精通第二讲–Python中列表操作详解 Python ...

  6. 【Python】Python实战从入门到精通之三 -- 教你使用Python中条件语句

    本文是Python实战–从入门到精通系列的第三篇文章: Python实战从入门到精通第1讲–Python中的变量和数据类型 Python实战从入门到精通第2讲–Python中列表操作详解 Python ...

  7. 【Python】Python实战从入门到精通之一 -- 教你深入理解Python中的变量和数据类型

    本文是Python实战–从入门到精通系列的第一篇文章: Python实战从入门到精通之一 – 教你深入理解Python中的变量和数据类型 文章目录 1.变量 1.1 变量命名规则 1.2 变量名称错误 ...

  8. 黑客零基础入门教程:「黑客攻防实战从入门到精通(第二版)」堪称黑客入门天花板

    前言 您知道在每天上网时,有多少黑客正在浏览您计算机中的重要数据吗﹖黑客工具的肆意传播,使得即使是稍有点计算机基础的人,就可以使用简单的工具对网络中一些疏于防范的主机进行攻击,在入侵成功之后,对其中的 ...

  9. 视频教程-Word项目实战从入门到精通(兼容2007、2010、2013、2016)-Office/WPS

    Word项目实战从入门到精通(兼容2007.2010.2013.2016) 有十年的开发经验和十年的培训经验,熟悉以下技术: 开源技术:struts2.hibernate.mybatis.spring ...

  10. Arduino从入门到精通全课时教程分享

    Arduino从入门到精通全课时教程分享 欢迎使用Arduino全套教程下载 课程详细图片 链接:https://pan.baidu.com/s/1a2xMyWa6n5de1WlRulSmYQ 提取码 ...

最新文章

  1. Python多线程(3)——Queue模块
  2. 初步理解TCP/IP网络
  3. Linux命令之ln软链接
  4. UnitTest in .NET(Part 4)
  5. arch linux 入门,arch linux 从来就不是给新手入门用的
  6. android 3.0单元测试,Android Studio 3.0 gradle 3.0.0-beta2打破了Kotlin单元测试覆盖率?
  7. Java工作笔记-webService发布时通用的4个注解
  8. Spark Standalone架构设计要点分析
  9. 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...
  10. [转载] 全本张广泰——第一回 开篇聊闲天 青楼是非多
  11. xuperchain 区块最大大小 区块容量 maxblocksize
  12. 阿铭Linux第二章笔记
  13. 关于hive分区,你知道多少呢?
  14. centos7系统开启ftp服务器,centos7开启ftp服务器
  15. 利用SSA方法插值GRACE数据的空缺数据
  16. 信息化教学设计教案计算机,信息化教学设计模板
  17. 无线传感器网络作业题
  18. 无敌破坏王2口碑爆棚,从街游到手游你最爱哪款游戏呢?
  19. 制作可独立分发的Android模拟器
  20. Vue实战篇三十三:实现新闻的浏览历史

热门文章

  1. Java将视频文件、图片文件转Base64编码
  2. 记录解决Mac系统升级后三指取词、词典失效问题的过程
  3. PHP开发之留言板项目的一般流程,PHP留言板小项目(大作业)
  4. php去除文字格式,php如何清除html格式并去除文字中的空格然后截取文字
  5. layui官网地址(备份),layui文档地址(新)
  6. 为什么在 Windows 7系统下无法显示 STEP 7 MicroWin SP9的帮助文件?
  7. 2019美赛参赛获奖经验
  8. 低俗文章之傻傻分不清楚的IC和ID卡(手稿)
  9. u盘ios刻录_ISO to USB(ISO刻录到U盘)下载|ISO to USB(ISO刻录到U盘)官方下载-太平洋下载中心...
  10. 注册测绘师复习方法,注册测绘师考试心得