Maven实战从入门到精通(全)

您所在的位置:网站首页 实战版本 Maven实战从入门到精通(全)

Maven实战从入门到精通(全)

2024-07-11 20:47| 来源: 网络整理| 查看: 265

前言

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

在这里插入图片描述

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

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

清理:把之前项目编译的东西删除掉,为新的编译代码做准备。

编译: 把程序源代码编译为执行代码, 把java编译成class文件且是批量的,maven可以同时把成千上百的文件编译为class。这与javac 不一样,javac一次编译一个文件。 测试: maven可以执行测试程序代码,验证你的功能是否正确。批量的,maven同时执行多个测试代码,同时测试很多功能。

报告: 生成测试结果的文件,具体文件是测试有无通过。

打包: 项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件, 通常java程序,压缩文件是jar扩展名的。对于web应用,压缩文件扩展名是.war

安装: 把5中生成的文件jar,war安装到本机仓库

部署: 把程序安装好可以执行。

核心概念:①POM :名称是pom.xml(项目对象模型)

maven把一个项目当做一个模型使用 控制maven构建项目的过程,管理jar依赖。

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

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

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

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

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

1. 安装及配置

从maven的官网下载maven的安装包

解压安装包,解压到一个目录,非中文目录 子目录 bin :执行程序,主要是mvn.cmd conf :maven工具本身的配置文件 settings.xml

配置环境变量

在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录,bin之前的目录 再把M2_HOME加入到path之中,在所有路径之前加入 %M2_HOME%\bin; 验证,新的命令行中,执行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仓库具体的具体

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

2.3 仓库

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

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

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

修改maven的配置文件/conf/settings.xml, 先备份 settings.xml 修改 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 包的名称

公司域名的倒写 自定义项目名称 自定版本号

具体搜索使用的中央仓库是中央仓库地址通过仓库搜索后的驱动配置(以jar包结尾)在这里插入图片描述2.packaging: 打包后压缩文件的扩展名,默认是jar ,web应用是war 。默认不写是jar包

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

mysql mysql-connector-java 5.1.9

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文件, 一些类。

编译插件的配置

org.apache.maven.plugins maven-compiler-plugin 3.8.1 1.8 1.8 2.7 单元测试junit

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

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

junit junit 4.11 test

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

测试类的名称 是Test + 你要测试的类名 测试的方法名称 是:Test + 方法名称

例如要测试HelloMaven ,创建测试类 TestHelloMaven

@Test public 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 { @Test public 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后缀的包

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

在这里插入图片描述以下build为插件的信息,即插件的管理。具体列出来与不列出来之后都会生成,主要是为了方便版本配置,可以删除具体有清楚插件、资源插件、编译插件、生成报告插件、打包插件、安装插件、部署插件等在这里插入图片描述此时大概已经配置完毕

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

在这里插入图片描述

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

javax.servlet javax.servlet-api 3.1.0 provided javax.servlet.jsp jsp-api 2.1 provided 3.4 常用技巧

1. 刷新pom.xmlpom文件加入依赖后,有下划线,代表还未更新到,需要刷新可以通过点击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中才测试有效 junit junit 4.11 test

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

javax.servlet javax.servlet-api 3.1.0 provided 4.2 常用属性

设置maven的常用属性在这里插入图片描述在maven的全局变量中可以自定义属性

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

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

比如以下这行代码

UTF-8 1.8 1.8 junit junit 4.11 test

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

4.11 ${junit.version}

完整代码演示:

UTF-8 1.8 1.8 4.11 junit junit ${junit.version} test 4.3 资源插件 默认没有使用resources的时候, maven执行编译代码时, 会把src/main/resource目录中的文件拷贝到target/classes目录中,对于src/main/java目录下的非java文件不处理,不拷贝到target/classes目录中 要想加入其他非java文件进行处理,需要添加以下代码,在build中加入其resources

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

src/main/java **/*.properties **/*.xml false


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3