- Maven(1)基础

xiaoxiao2021-02-28  13

>> Maven 介绍

Apache Maven 是一个软件项目管理的综合工具。

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。在多个开发团队环境时,Maven 可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven 让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

1、Maven 提供了开发人员的方式来管理:

BuildsDocumentationReportingDependenciesSCM(Software Configuration Management)ReleasesDistributionmailing list

概括地说,Maven 简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven 增加可重用性并负责建立相关的任务。

2、Maven 两大核心:

(1)依赖管理:就是对jar包统一管理的过程;

(2)项目构建: 项目在编码完成后,对项目进行编译、测试、打包、部署一系列的操作都通过命令来实现,每一步操作都对应一个命令;(使用Eclipse也可以实现)

Eg:通过Maven命令将web项目发布到Tomcat:命令行进入到pom.xml目录下,执行mvn tomcat:run,然后会有链接地址,直接复制到浏览器打开即可;

3、Maven 三种仓库类型:


>> Maven 安装与配置

(1)安装配置Java

(2)安装Eclipse

(3)下载Maven

下载地址: http://maven.apache.org/download.cgi#

1、下载后直接解压缩即可(解压目录不要有中文、空格);

2、配置环境变量:“我的电脑”右键菜单—>属性—>高级—>环境变量—>系统变量—>新建—>在path里面添加D:\Maven\apache-maven-3.5.2-bin\apache-maven-3.5.2\bin;

3、在 Windows 命令提示符下输入“mvn -version”查看 Maven 是否成功:

4、修改 ...\apache-maven-3.3.3\conf\settings.xml 文件,配置本地仓库(让Maven程序知道仓库在哪):

(1) 修改 Maven 仓库的路径:大概在54行的位置做如下修改: <localRepository>E:/MavenRepository</localRepository>

(2) 添加阿里云中央仓库地址:在<mirror>...</mirror>标签里添加代码:

(3) 修改Maven默认的编辑的版本信息:在<profiles>...</profiles>标签里面添加代码:

<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> ----------------------------------------------------------------------- <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties>

(4)命令行方式创建Maven项目

参考链接:https://jingyan.baidu.com/article/b0b63dbfc52e9b4a49307054.html

1、我们可以在任意目录下来创建 Maven 项目,一般的项目格式如下:(注意要切换到存放项目的盘符E:\MavenRepository) cmd: mvn archetype:generate -DgroupId=com.jase.test -DartifactId=MyWebDriver -Dversion=1.0

mvn archetype:generate 创建Maven项目

generate 用于创建 Maven 项目;

DgroupId 指定包的名称;

DartifactId 指定项目名称;

Dversion 指定版本号;

2、由于是首次创建项目,所以,Maven 需要下载一些基础的依赖包,这个过程会相对比较漫长。当项目创建结束,会在当前目录下生成MyWebDriver 项目。但现在生成的项目还不能直接导入到Eclipse 中,还需要执行以下命令:

> cd MyWebDriver MyWebDriver> mvn clean compile //clean 清除项目中的生成结果;compile 编译测试程序 MyWebDriver> mvn eclipse:eclipse //eclipse:eclipse :生成 Eclipse 项目文件

3、下面就可以通过Eclpse 导入MyWebDriver 项目,启动Eclipse,选择菜单栏File–>Import–>Existing Projects into Workspace --> 点击“Next”,添加本 MyWebDriver 目录。

4、配置Maven程序:

5、修改Maven 配置文件路径。在Eclipse 菜单栏选择Window–>Perferences–>Maven–>User Settings。

6、构建索引:提高检索速度:Window --> Show View --> Other --> Maven Repositories


>> 包的管理与更新 - pom.xml

Maven 中央仓库地址:http://search.maven.org/

在 Maven 中由 pom.xml 文件对当前项目的包进行管理,在我们创建的 MyWebDriver 项目中找到该文件打开:

<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.jase.test</groupId> <artifactId>MyWebDriver</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>MyWebDriver</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> project:pom.xml 文件中的顶层元素;modelVersion:指明 POM 使用的对象模型的版本。这个值很少改动。groupId:指明创建项目的组织或者小组的唯一标识。GroupId 是项目的关键标识,典型的,此标识以组织的完全限定名来定义。比如,org.apache.maven.plugins 是所有 Maven 插件项目指定的 groupId。artifactId:指明此项目产生的主要产品的基本名称。项目的主要产品通常为一个 JAR 文件。第二, 象源代码包通常使用 artifactId 作为最后名称的一部分。典型的产品名称使用这个格式:<artifactId>- <version>. <extension>(比如:myapp-1.0.jar)。version:项目产品的版本号。Maven 帮助你管理版本,可以经常看到 SNAPSHOT 这个版本,表明项目处于开发阶段。name:项目的显示名称,通常用于 maven 产生的文档中。url:指定项目站点,通常用于 maven 产生的文档中。description:描述此项目,通常用于 maven 产生的文档中。

对于一个项目中只有下面的一部分是我们需要关注的:

<groupId>com.chongshi.test</groupId> <artifactId>hello</artifactId> <version>1.0</version> //版本可以到 Maven 的中央仓库去查询 <http://search.maven.org/> <scope></scope> //主要管理依赖的部署的范围。使用5个值:compile、test、runtime、provided、system

通过查看 pom.xml 中 Junit 的配置,显然版本有些旧了,我们去下载最新的 Junit4,但我们又不知道Maven 中的具体的版本怎么办呢?我们可以到 Maven 的中央仓库去查询。

查询得到的版本号是4.12 ,下面修改配置 pom.xml 文件:

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>

重新在项目下执行“mvn eclipse:eclipse”命令 :MyWebDriver> mvn eclipse:eclipse,打开项目的 Libraries,jar包在Referenced library 里面:


>> Maven 运行测试用例: Junit+Selenium

我们使用 maven,除了可以用它来方便管理 Java 的包外,另一个重要原因是可以用它来运行测试用例。下面我们就在项目中创建基于 Junit 的 web 自动化测试脚本。(注意是new Junit,不是class)

**注意:**测试用例一定要创建在 test 的目录中,如果创建在 main 目录中并不会被 maven 执行。

1、BaiduTest.java package com.jase.test; import ...... public class BaiduTest { private WebDriver driver; private String baseUrl; private StringBuffer verificationErrors = new StringBuffer(); @Before public void setUp() throws Exception { driver = new ChromeDriver(); baseUrl = "https://www.baidu.com/"; driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); } @Test public void testCase() throws Exception { driver.get(baseUrl + "/"); driver.findElement(By.id("kw")).clear(); driver.findElement(By.id("kw")).sendKeys("maven test"); driver.findElement(By.id("su")).click(); Thread.sleep(2000); String title =driver.getTitle(); assertEquals(title,"maven test_百度搜索"); } @After public void tearDown() throws Exception { driver.quit(); String verificationErrorString = verificationErrors.toString(); if (!"".equals(verificationErrorString)) { fail(verificationErrorString); } } } 2、下面通过 Maven 来执行测试:cmd下输入: MyWebDriver> mvn clean //clean 清除项目中的生成结果 MyWebDriver> mvn test //test 执行测试 3、在执行 test 命令时会运行 Junit 测试用例,并且在产生运行日志;以下为运行测试的 log: E:\Eclipse WorkSpace\MyWebDriver>mvn test [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building MyWebDriver 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MyWebDriver --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\Eclipse WorkSpace\MyWebDriver\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ MyWebDriver --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ MyWebDriver --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\Eclipse WorkSpace\MyWebDriver\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ MyWebDriver --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ MyWebDriver --- [INFO] Surefire report directory: E:\Eclipse WorkSpace\MyWebDriver\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.jase.test.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.056 sec Running com.jase.test.BaiduTest Starting ChromeDriver 2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1) on port 39620 Only local connections are allowed. 一月 14, 2018 3:08:30 下午 org.openqa.selenium.remote.ProtocolHandshake createSession 信息: Detected dialect: OSS Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 19.616 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 21.827 s [INFO] Finished at: 2018-01-14T15:08:44+08:00 [INFO] Final Memory: 10M/110M [INFO] ------------------------------------------------------------------------

注意编码问题:

maven的pom.xml里面编码用的是UTF-8,要修改eclipse里面编码为UTF-8,否则执行测试用例可能会出现错误;

Eclipse --> Winows --> Preference -->


>> Maven 常用命令

Eclipse能做的操作,通过Maven命令都可以实现,但是前提是项目符合Maven项目的目录规范;Maven目录结构可以手动创建,也可以通过IDE实现;

|命令|作用| |–| |mvn archetype:generate| 创建Maven项目| |mvn clean| 清除项目目录中的生成结果| |mvn compile |编译源代码| |mvn test-compile|编译测试源代码| |mvn test |运行应用程序中的单元测试| |mvn package |根据项目生成的jar| |mvn install |在本地Repository中安装jar| |mvn deploy |发布项目| |mvn site |生成项目相关信息的网站| |mvn eclipse:eclipse |生成eclipse项目文件| |mvn jetty:run |启动jetty服务| |mvn tomcat:run| 启动tomcat服务| |mvn clean package -Dmaven.test.skip=true:|清除以前的包后重新打包,跳过测试类|

mvn clean:删除项目根目录下的target文件夹(.class文件);执行这个命令使用的是Maven仓库下的maven-clean-plugin工具; 相当于Eclipse Project --> Clean

mvn compile:将项目中的.java文件编译成.class文件;使用的是maven-compiler-plugin工具;

mvn test:将项目根目录下的src/test/java目录下的单元测试类都会执行;单元测试类名有要求:XxxxTest.java; 在eclipse下点开test文件夹下的测试类,右键Run As --> Junit Test;

mvn package:web project -- war包、java project -- jar包:将项目打包到项目根目录下的target目录下; Eclipse下在项目名右键导出 jar包、war包;

mvn install:解决本地多个项目共用一个jar包问题,打包到本地仓库;其他项目需要使用这个jar包的内容时只需要在pom.xml文件里配置路径即可;这个项目需要修改时,只需在修改后重新执行install命令即可;


>> Maven 项目的生命周期

在Maven中存在3套生命周期,每一套生命周期相互独立,互不影响;在一套生命周期内,执行后面的命令,前面操作会自动执行;

CleanLifeCycle:清理生命周期 --> clean

DefaultLifeCycle:默认生命周期 --> compile --> test --> package --> install --> deploy

SiteLifeCycle:站点生命周期 --> site


>> Maven 依赖范围

<scope></scope>,它主要管理依赖的部署:jar包对项目的作用范围(对于编译、测试、运行时classpath有效);运行就是部署到Tomcat;

目前可以使用 5 个值:

compile:缺省值,适用于所有阶段,会随着项目一起发布。

test:只在测试时使用,用于编译和运行测试代码。不会随项目发布。

provided:运行部署到Tomcat不再需要,如 servlet-api.jar。 若servlet-api不设置成provided,采用默认的compile,部署到Tomcat的时候,就会在打包成war包的时候,把这个jar包也打包进去,然后在Tomcat里面运行这个war包,但是Tomcat的lib里面也有servlet-api这个jar包,这样项目中也有jar包,就会发生jar包冲突的问题,so项目在请求这个jar包的时候就会报错,运行失败;

runtime:只在运行时使用,如 JDBC 驱动,适用运行和测试阶段。

system:类似 provided,需要显式提供包含依赖的 jar,Maven 不会在 Repository 中查找它。

|依赖范围|对于编译classpath有效|对于测试classpath有效|对于运行时classpath有效|例子| |–| |compile|Y|Y|Y|spring-core| |test|-|Y|-|junit(设置成默认无影响)| |provided|Y|Y|-|servlet-api、jsp-api(必须设置成provide)| |runtime|-|Y|Y|JDBC驱动(设置成默认无影响)| |system|Y|Y|-|本地的Maven仓库之外的类库|

总结:若使用到Tomcat自带的jar包,将项目中依赖的作用范围设置为provided;

servlet-apijsp-api

**>> Maven **

转载请注明原文地址: https://www.6miu.com/read-1650302.html

最新回复(0)