项目管理Maven系列(二)
创建项目、POM文件、依赖机制
生命周期、定制库、外部依赖
目录
- 1、创建Maven项目
- 1.1、命令行/终端创建
- 1.2、Eclipse创建
- 1.3、Java项目转Maven项目
- 2、POM文件
- 2.1、依赖
- 2.1.1、JUnit
- 2.1.2、TestNG
- 2.1.3、Selenium
- 2.1.4、Appium
- 2.1.5、OkHttp
- 2.1.6、HttpClient
- 2.1.7、JSON
- 2.1.8、ExtentReports
- 2.2、插件
- 2.2.1、maven-compiler-plugin
- 2.2.2、maven-surefire-plugin
- 2.3、远程仓库
- 2.1、依赖
- 3、依赖机制
- 4、构建生命周期
- 5、定制库到本地资源库
- 6、引用外部依赖
1、创建Maven项目
1.1、命令行/终端创建
1、在Widnows(命令行)或Mac(终端)中,本节以Widnows为例,打开命令行,进入到要创建Maven项目的文件夹里,输入命令(组ID为com.test.demo、项目ID为My_Maven_Demo):
代码语言:javascript复制mvn archetype:generate -DgroupId=com.test.demo -DartifactId=My_Maven_Demo -DarchetypeArtifactId=maven-archetype-quickstart
如图所示:创建完成。
注:安装过程可能有需要确认的,回车即可。
已经创建完成的Maven项目(My_Maven_Demo)。
2、为了可以在Eclipse上使用,命令行进入到My_Maven_Demo项目里,输入命令:
mvn eclipse:eclipse
3、打开Eclipse,导入项目。
依次点击File--->Import--->General--->Existing Projects into Workspace。
选择刚创建的Maven项目(My_Maven_Demo),点击Finish。
选中项目,鼠标右键Configure--->Convert to Maven Project,进行转换为Maven项目即可。
4、如图所示:项目结构。
所有的源代码放在/src/main/java/文件下。
所有的单元测试代码放在/src/test/java/文件下。
POM文件(pom.xml)描述整个项目的信息,从目录结构,项目的插件,项目的依赖,如何构建这个项目等。
1.2、Eclipse创建
1、本节以Widnows为例,打开Eclipse,创建项目。
依次点击File--->New--->Project--->Maven--->Maven Project。
默认即可,点击Next。
选择Artifact Id为maven-archetype-quickstart,点击Next。
输入组ID、项目ID、版本、包等信息,点击Finish。
2、如图所示:项目结构。
所有的源代码放在/src/main/java/文件下。
所有的单元测试代码放在/src/test/java/文件下。
POM文件(pom.xml)描述整个项目的信息,从目录结构,项目的插件,项目的依赖,如何构建这个项目等。
1.3、Java项目转Maven项目
本节以Widnows为例,打开Eclipse。
如图所示:My_Maven_Demo3为已经创建完成的Java项目。
1、选中项目,鼠标右键Configure--->Convert to Maven Project,进行转换为Maven项目。
输入组ID、项目ID、版本等信息,点击Finish即可。
2、如图所示:项目结构。
POM文件(pom.xml)描述整个项目的信息,从目录结构,项目的插件,项目的依赖,如何构建这个项目等。
2、POM文件
POM代表项目对象模型。它是Maven中工作的基本单位,是一个XML文件(pom.xml)。
POM包含的项目是使用Maven来构建的,用来包含各种配置信息、目标、插件等,在执行任务或目标时,Maven会使用当前目录中的POM文件,读取得到所需要的配置信息,然后执行目标。要注意的是,每个项目只有一个POM文件(pom.xml)。
pom.xml的根元素是project,它有三个主要的子节点:
(1)groupId这是项目组的编号,是独一无二的。例如:com.test.demo
(2)artifactId这是项目的ID,即项目的名称。例如:My_Maven_Demo
(3)version这是项目的版本。例如:1.0
在库中的项目符号是:groupId:artifactId:version
例如:com.test.demo:My_Maven_Demo:1.0
2.1、依赖
依赖是Maven中最关键的部分,之所以在工程中使用Maven,就是因为它的依赖管理功能。如果想要在工程中引入某个jar包,只需要在pom.xml中引入其jar包的坐标即可。
如何获取jar包的坐标?
以获取Junit jar包坐标为例。
1、打开Maven存储库网址:http://mvnrepository.com/,在搜索栏输入junit后点击搜索。
2、在搜索结果页里,找到junit,点击进入。
3、选择相应版本号,例如4.12,点击进入。
4、如图所示:获取到了JUnit包坐标。
5、将获取到的坐标拷贝到pom.xml文件的里即可。
2.1.1、JUnit
代码语言:javascript复制<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.1.2、TestNG
代码语言:javascript复制<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
<scope>test</scope>
</dependency>
2.1.3、Selenium
代码语言:javascript复制<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.12.0</version>
</dependency>
2.1.4、Appium
代码语言:javascript复制<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>6.1.0</version>
</dependency>
2.1.5、OkHttp
代码语言:javascript复制<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
2.1.6、HttpClient
代码语言:javascript复制<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
2.1.7、JSON
代码语言:javascript复制<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
2.1.8、ExtentReports
代码语言:javascript复制<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.1.5</version>
</dependency>
2.2、插件
将插件拷贝到pom.xml文件的里即可。
2.2.1、maven-compiler-plugin
添加此编译器插件来告诉Maven使用哪个JDK版本(例如1.8)用来编译项目。
代码语言:javascript复制<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
2.2.2、maven-surefire-plugin
Maven通过Maven Surefire Plugin插件执行单元测试。(通过Maven Failsafe Plugin插件执行集成测试)。
在pom.xml中配置JUnit、TestNG测试框架的依赖,即可自动识别和运行src/test目录下利用该框架编写的测试用例。Maven Surefire Plugin也能识别和执行符合一定命名约定的普通类中的测试方法(POJO测试:简单的Java对象测试)。
构建生命周期中test阶段默认绑定的插件目标就是Maven Surefire Plugin中的test目标,无需额外配置,直接运行mvn test就可以。
代码语言:javascript复制<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
结合TestNG(执行testng.xml):
代码语言:javascript复制<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
2.3、远程仓库
代码语言:javascript复制<repositories>
<repository>
<id>saucelabs-repository</id>
<url>https://repository-saucelabs.forge.cloudbees.com/release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
3、依赖机制
1、打开Maven项目的POM文件(pom.xml),添加所要使用的依赖(例如jta)。
代码语言:javascript复制<dependencies>
<dependency>
<groupId>jta</groupId>
<artifactId>jta</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
添加远程仓库,Maven会从远程仓库下载依赖项(中央存储库搜索不到依赖)。
代码语言:javascript复制<repositories>
<repository>
<id>saucelabs-repository</id>
<url>https://repository-saucelabs.forge.cloudbees.com/release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
2、当Maven编译或构建,jta的jar会自动下载,并把它放到Maven的本地资源库里。
Maven依赖搜索使用顺序:
(1)搜索本地资源库,如果没有找到,跳到第(2)步,否则,如果找到那么会做进一步处理。
(2)搜索中央存储库,如果没有找到,跳到第(3)(4)步,否则,如果找到那么它会把依赖下载到本地资源库中,以备将来参考使用。
(3)如果没有设置远程仓库,Maven则会停止处理并抛出错误(找不到依赖库)。
(4)搜索远程仓库,如果没有找到,Maven则会停止处理并抛出错误(找不到依赖库)。否则,如果找到那么它会把依赖下载到本地资源库中,以备将来参考使用。
4、构建生命周期
对于构建Maven项目的人来说,只需要学习一小组命令就可以构建任何的Maven项目,而POM文件(pom.xml)将确保他们得到他们想要的结果。
Maven有三种内置的构建生命周期:default(处理项目部署)、clean(处理项目清理工作)和site(处理项目所生成的文档)。
下面列出default、clean和site生命周期的所有构建阶段,这些阶段按照指定的顺序执行:
代码语言:javascript复制1、clean生命周期(处理项目清理工作)
(1)pre-clean 在实际的项目清理之前执行所需的过程。
(2)clean 删除前一个构建生成的所有文件。
(3)post-clean 执行完成项目清理所需的过程。
2、default生命周期(处理项目部署)
(1)validate 验证项目是正确的,所有必要的信息都是可用的。
(2)initialize 初始化构建状态,例如设置属性或创建目录。
(3)generate-sources 生成包含在编译中的任何源代码。
(4)process-sources 处理源代码,例如过滤任何值。
(5)generate-resources 生成包含在包中的资源。
(6)process-resources 将资源复制并处理到目标目录中,准备打包。
(7)compile 编译项目的源代码。
(8)process-classes 后处理编译生成的文件,例如对Java类进行字节码增强。
(9)generate-test-sources 生成包含在编译中的任何测试源代码。
(10)process-test-sources 处理测试源代码,例如过滤任何值。
(11)generate-test-resources 为测试创建资源。
(12)process-test-resources 将资源复制并处理到测试目标目录中。
(13)test-compile 将测试源代码编译到测试目标目录。
(14)process-test-classes 从测试编译中处理生成的文件,例如对Java类进行字节码增强。对于Maven 2.0.5及以上版本。
(15)test 使用合适的单元测试框架运行测试,这些测试不应该要求代码被打包或部署。
(16)prepare-package 在真正的打包之前,执行一些准备打包必要的操作,这通常会产生一个包的展开的处理过的版本。(Maven 2.1及以上)
(17)package 使用已编译的代码,并将其打包成可部署格式,例如JAR。
(18)pre-integration-test在执行集成测试之前执行所需的操作,这可能涉及诸如设置所需环境等。
(19)integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境。
(20)post-integration-test 执行集成测试后所需要的操作,这可能包括清理环境。
(21)verify 运行任何检查以验证包是否有效,并满足质量标准。
(22)install 将该包安装到本地资源库中,作为本地其他项目的依赖项。
(23)deploy 在集成或发布环境中完成,将最终包复制到远程存储库中,以便与其他开发人员和项目共享。
3、site生命周期(处理项目所生成的文档)
(1)pre-site 在实际的项目站点生成之前执行过程。
(2)site 生成项目的站点文档。
(3)post-site 执行确定站点生成的过程,并为站点部署做好准备。
(4)site-deploy 将生成的站点文档部署到指定的web服务器。
5、定制库到本地资源库
创建自定义jar(myjar.jar)到Maven的本地资源库里。
1、创建My_Maven_Jar项目,并创建MyJar类,将项目打包成jar。
如图所示:My_Maven_Jar项目结构。
MyJar类,脚本代码:
代码语言:javascript复制package com.test2.demo;
public class MyJar {
public static void main(String[] args) {
MyJar myJar = new MyJar();
myJar.myTest();
}
public void myTest() {
System.out.println("Hello MyJar");
}
}
运行结果:控制台输出Hello MyJar
右键点击项目选择导出(Export)。
选择Java--->JAR file,点击Next。
选择你要导出的项目以及文件,指定文件导出路径,点击Next。
点击Next。
选择主类,点击Finish。
如图所示:将项目打包成myjar.jar。
打开命令行运行myjar.jar,输入 java -jar myjar.jar
如图所示:运行成功。
2、将myjar.jar安装到Maven的本地资源库里。
打开命令行输入安装命令:
代码语言:javascript复制mvn install:install-file -Dfile=D:workspace2myjar.jar -DgroupId=com.test2.demo -DartifactId=myjar -Dversion=1.0 -Dpackaging=jar
如图所示:本地资源库可以搜索到刚刚安装完成的myjar.jar。
3、Maven项目引用定制库。
创建Maven项目(My_Maven_Demo4),如图所示:
修改POM文件(pom.xml),添加依赖(myjar.jar)。
代码语言:javascript复制<dependency>
<groupId>com.test2.demo</groupId>
<artifactId>myjar</artifactId>
<version>1.0</version>
</dependency>
如图所示:Maven依赖已经添加进来myjar.jar。
创建测试类(MyTest),验证定制依赖(myjar.jar)的方法。
MyTest类,脚本代码:
代码语言:javascript复制package com.test.demo;
import org.junit.Test;
import com.test2.demo.MyJar;
public class MyTest {
@Test
public void testDemo(){
MyJar t = new MyJar();
t.myTest();
}
}
执行项目,pom.xml鼠标右键Run As--->Maven test。
运行结果:执行成功。
6、引用外部依赖
1、创建Maven项目(My_Maven_Demo5),创建lib文件夹,将要引用的外部依赖拷贝进去(例如:自定义库myjar.jar)。
2、修改POM文件(pom.xml),引用外部依赖(myjar.jar)。
代码语言:javascript复制<dependency>
<groupId>com.test2.demo</groupId>
<artifactId>myjar</artifactId>
<version>1.0</version>
<systemPath>${basedir}/lib/myjar.jar</systemPath>
<scope>system</scope>
</dependency>
如图所示:Maven已将外部依赖myjar.jar引用进来了。
3、创建测试类(MyTest),验证引用外部依赖(myjar.jar)的方法。
MyTest类,脚本代码:
代码语言:javascript复制package com.test.demo;
import org.junit.Test;
import com.test2.demo.MyJar;
public class MyTest {
@Test
public void testDemo(){
MyJar t = new MyJar();
t.myTest();
}
}
执行项目,pom.xml鼠标右键Run As--->Maven test。
运行结果:执行成功。