- Maven(1)基础

>> 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 提供了开发人员的方式来管理:
  • Builds
  • Documentation
  • Reporting
  • Dependencies
  • SCM(Software Configuration Management)
  • Releases
  • Distribution
  • mailing 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 packageweb 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-apijsp-api(必须设置成provide)|
|runtime|-|Y|Y|JDBC驱动(设置成默认无影响)|
|system|Y|Y|-|本地的Maven仓库之外的类库|

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

  • servlet-api
  • jsp-api

**>> Maven **

### 回答1: dockerfile-maven-plugin 是一个 Maven 插件,用于自动生成 Docker 镜像的 Dockerfile 文件。它可以根据 Maven 项目的 pom.xml 文件和一些配置参数,自动生成 Dockerfile 文件,并将其用于构建 Docker 镜像。这个插件可以大大简化 Docker 镜像构建的过程,提高开发效率。 ### 回答2: dockerfile-maven-plugin 是一个用于帮助在 Maven 项目中使用 Dockerfile 构建和管理 Docker 镜像的插件。 在传统的开发中,我们需要手动构建 Docker 镜像,并在 Dockerfile 中定义构建步骤和依赖关系。而使用 dockerfile-maven-plugin 可以将这一过程集成到 Maven 构建中,进一步简化了开发过程。 使用 dockerfile-maven-plugin,我们可以在 Maven 的 pom.xml 文件中配置一系列的构建参数和指令。这些参数包括 Dockerfile 文件路径、镜像名称、版本、标签等。通过这些配置,插件可以自动地根据 Dockerfile 构建 Docker 镜像,并将其推送到远程镜像仓库。 该插件还提供了一些额外的特性,例如多阶段构建、构建缓存、构建参数传递等。其中,多阶段构建允许我们按照不同的阶段构建镜像,以便优化镜像大小和构建速度;构建缓存则可以在多次构建中重复使用相同的构建步骤,避免重复构建;构建参数传递则可以在构建过程中传递环境变量或者其他参数,灵活控制镜像构建的过程。 总而言之,dockerfile-maven-plugin 提供了一种便捷的方式,将 Docker 镜像构建过程整合到 Maven 构建中。使用该插件,我们可以在 Maven 构建过程中自动构建和管理 Docker 镜像,提高了开发效率和部署一致性。 ### 回答3: Dockerfile-maven-plugin是一个maven插件,用于帮助开发人员在构建过程中生成Docker镜像。Docker镜像是一个轻量级、可移植、自包含的容器,使应用程序的部署更加简单和可靠。 使用Dockerfile-maven-plugin,我们可以为项目配置一个Dockerfile文件,该文件指定了如何构建和运行应用程序的容器。该插件提供了一系列的目标和参数,用于自动化构建、镜像打包和标记、上传到Docker Hub等操作。 在配置中,我们可以指定应用程序的依赖项、环境变量、端口映射等信息,以及Docker镜像的基础映像和其他镜像相关的配置。此外,我们还可以使用插件的额外功能,如构建多阶段、使用多个Dockerfile等。 使用Dockerfile-maven-plugin,我们可以在maven构建过程中集成Docker镜像的构建和发布,减少了手动操作的复杂性和错误的可能性。此外,该插件还可以与其他maven插件和工具集成,实现更复杂的自动化构建流程。 总而言之,Dockerfile-maven-plugin是一个方便的maven插件,用于在项目构建过程中生成Docker镜像。它帮助简化了Docker容器的构建和部署过程,提高了开发人员的效率,并且可以与其他工具集成,实现更复杂的构建流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值