项目管理Maven系列(二)- 创建项目、POM文件、依赖机制、生命周期、定制库、外部依赖

2022-07-25 17:27:25 浏览数 (1)

项目管理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、远程仓库
  • 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。

运行结果:执行成功。

0 人点赞