Maven实战从入门到精通(全) |
您所在的位置:网站首页 › 实战版本 › Maven实战从入门到精通(全) |
前言
了解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. 核心概念每一个maven项目在磁盘中都是一个文件夹(项目-Hello) Hello/ ---/src ------/main #主程序java代码和配置文件 ----------/java #程序包和包中的java文件 ----------/resources #java程序中要使用的配置文件 ------/test #测试程序代码和文件的(可以没有) ----------/java #测试程序包和包中的java文件 ----------/resources #测试java程序中要使用的配置文件 ---/pom.xml #maven的核心文件(maven项目必须有)类似这样的目录结构,以树为结构 编译成功之后会在项目的根目录下生成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包结尾) 3.依赖信息:项目中要使用的各种资源说明 dependencies 和dependency ,相当于是 java代码中import mysql mysql-connector-java 5.1.94.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 生命周期以及插件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 设置mavenidea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。使用自个安装的maven,覆盖idea默认的设置,让idea指定maven的安装具体位置 修改设置为自已安装的maven 具体idea版本不一样,界面稍微不太一样,不过大同小异常用的目录结构已经创建好使用模板创建maven项目,以下的模板没有resources 新建的项目默认目录是
对比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右键进行刷新
3.导入一个存在的项目 如果本身项目有pom.xml,则需设置为maven在设置中进行添加模块 依赖范围:使用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的常用属性 自定义全局变量一般是定义 依赖的版本号, 当你的项目中要使用多个相同的版本号,先使用全局变量定义, 在使用${变量名} 比如以下这行代码 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 |