Maven主要用于基于Java的项目的构建、依赖管理和项目信息管理。
操作视频
本视频介绍基于图形化构建方式执行Maven构建的操作。
图形化构建
在配置构建步骤中,添加“Maven构建”构建步骤,参考表1配置参数。
表1 Maven构建步骤参数说明 | 参数 | 说明 |
| 步骤显示名称 | 构建步骤的名称,可自定义修改。 - 支持中文、英文、数字、“-”、“_”、英文逗号、英文分号、英文冒号、“.”、“/”、圆括号(中英文)。
- 字符长度范围为1~128。
|
| 工具版本 | 根据用户实际开发环境的需要,选择对应的工具版本。 CodeArts Build支持的工具版本,可查看构建工具版本。若当前的工具版本不满足您的使用要求,您可以制作镜像并推送到SWR仓库。 |
| 命令 | 配置Maven命令,一般使用系统默认生成的命令即可。如果需要配置更多命令,可参考Maven官网。 如果使用私有依赖库,需配置忽略证书命令,不同Maven版本命令不同。 - Maven 3.8及以下版本:
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true - Maven 3.9及以上版本:
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -Dmaven.resolver.transport=wagon |
| 失败后是否继续运行 | 当前步骤执行失败后是否继续执行下一个步骤,根据实际使用场景选择是或否。 |
| setting配置 | |
| 发布依赖包到CodeArts私有依赖库 | 编译构建服务默认使用私有依赖库作为私有依赖下载源,如果需要将构建产物上传至私有依赖库供其他项目依赖使用,则需要添加此配置。配置前,需已创建私有依赖库。配置方法如下: 上传的私有依赖包,在其他项目添加pom.xml文件中的groupId、artifactId、version坐标即可引用。 |
| 单元测试 | 如果用户需要对单元测试结果进行处理,可配置此项。详见配置单元测试。 |
| 缓存配置 | 选择是否使用缓存以提高构建速度,选择“使用缓存”后,每次构建时会把下载依赖包缓存起来,后续构建无需重复拉取,可有效提高构建速度。 Maven构建的依赖包存入缓存之后,只有当租户下面构建的项目有引进新的依赖包时,才会更新缓存目录,并不支持对已有的依赖包缓存文件进行更新。 |
代码化构建
参考以下代码示例,修改在创建代码化构建使用的YAML文件中的BUILD部分代码信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | version: 2.0 # 必须是2.0
steps:
BUILD:
- maven:
image: cloudbuild@maven3.5.3-jdk8-open# 可以自定义镜像地址
inputs:
settings:
public_repos:
- https://mirrors.example.com/maven
cache: true # 是否开启缓存
unit_test:
coverage: true
ignore_errors: false
report_path: "**/TEST*.xml"
enable: true
coverage_report_path: "**/site/jacoco"
command: mvn package -Dmaven.test.failure.ignore=true -U -e -X -B
ignore_fail: true
|
表2 代码示例参数说明 | 参数 | 类型 | 说明 |
| image | string | 填写镜像地址,有以下两种格式。 - cloudbuild@maven3.5.3-jdk8-open:以cloudbuild开始,@作为分隔符,后面是编译构建提供的默认镜像,编译构建支持的镜像构建工具版本可参考构建工具版本。
- 完整的swr镜像地址,例如:swr.example.example.com/codeci_test/demo:141d26c455abd6d7xxxxxxxxxxxxxxxxxxxx
镜像地址获取方式可参考获取SWR镜像地址。 |
| settings | map | 可选参数。当用户需要使用自定义“settings.xml”文件时,需要配置该参数。 不配置,则默认使用CodeArts提供的setting.xml文件,如果需要使用自定义的“settings.xml”文件,可先添加自定义setting.xml文件,然后在默认的打包命令mvn package -Dmaven.test.failure.ignore=true -U -e -X -B末尾添加--settings settings.xml。 |
| cache | bool | 可选参数。 配置是否开启缓存。 默认值:false。 |
| command | string | 配置执行的Maven命令。如果需要配置更多命令,可参考Maven官网。 |
| unit_test | map | 可选参数。 配置单元测试。详细操作指导参考配置单元测试。 |
| ignore_fail | string | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 |
添加自定义“setting.xml”文件
上传文件的约束限制条件如下:
- 文件大小限制为100k。
- 文件类型限制为:.xml、.key、.keystore、.jks、.crt、.pem。
- 最多支持上传20个文件。
添加文件有以下两种方式:
- 图形化构建
- 在“Maven构建”的命令窗口执行cat /home/build/.m2/settings.xml命令,任务执行完成后,会在构建日志中展示“settings.xml”文件的内容。
- 参考构建日志中的“settings.xml”的信息自定义新的“settings.xml”文件。
- 在“Maven构建”步骤前增加“下载文件管理的文件”构建步骤。
自定义步骤显示名称,工具版本当前仅支持“shell4.2.46-git1.8.3-zip6.00”。
- 单击“上传”,在弹出的窗口中选择2中自定义的文件,添加描述,勾选相关协议,然后单击“保存”。
- 在“下载文件”中选择上传的“setting.xml”文件。
- 代码化构建
参考以下代码示例,修改在
创建代码化构建使用的YAML文件中的
BUILD部分代码信息。
| | version: 2.0 # 必须是2.0
steps:
BUILD:
- download_file:
inputs:
name: settings.xml
ignore_fail: true
|
表3 下载文件管理的文件代码示例参数说明 | 参数 | 类型 | 说明 |
| name | string | setting文件名称。 |
| ignore_fail | string | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 |
其他操作
配置单元测试和配置使用JaCoCo生成单元测试覆盖率报告为可选操作,请根据实际需要进行配置。
- 单元测试:Maven构建工具中的单元测试主要用于验证软件代码的基本功能是否按照预期工作。在Maven项目中,通常使用JUnit或其他测试框架来编写和运行这些单元测试。
- 配置使用JaCoCo生成单元测试覆盖率报告:单元测试覆盖率报告用来衡量代码中哪些部分已经被单元测试覆盖,哪些部分还没有被覆盖。它可以帮助开发人员了解他们的测试是否充分地检查了所有的代码路径和逻辑。
配置单元测试
- 配置单元测试前,需要在项目中编写单元测试代码,且需满足如下条件:
- 在代码仓中创建单元测试类,如图1所示。
图1 单元测试文件目录
“Demo.java”文件代码示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | package test;
public class Demo {
public String test(Integer i) {
switch (i) {
case 1:
return "1";
case 2:
return "2";
default:
return "0";
}
}
}
|
“DemoTest.java”文件代码示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13 | package test;
import org.junit.Test;
public class DemoTest {
private Demo demo=new Demo();
@Test
public void test(){
assert demo.test(1).equals("1");
assert demo.test(2).equals("2");
assert demo.test(3).equals("0");
}
}
|
- 配置构建步骤中的单元测试。
- 配置完成后,如果构建任务执行成功,即可在任务执行详情页面的“测试”页签查看测试报告。如果选择了处理单元测试覆盖率报告,会生成覆盖率测试报告,单击“覆盖率报告下载”即可下载。
配置使用JaCoCo生成单元测试覆盖率报告
配置单元测试时,如果选择处理单元测试覆盖率结果,则需要按照如下指导进行配置。
- 单模块项目配置方法
在项目中已添加jacoco-maven-plugin插件用于生成单元覆盖率报告,即在“pom.xml”文件中添加如下配置:
JaCoCo的report目标默认是在verify阶段,这里需要将report目标定义为test阶段。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | <plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
|
- 多模块项目配置方法
假设多模块项目代码结构如下,以此为例为您介绍如何配置生成单元测试覆盖率报告。
| | ├── module1
│ └── pom.xml
├── module2
│ └── pom.xml
├── module3
│ └── pom.xml
├── pom.xml
|
- 在项目下添加一个用来聚合的模块,自定义名称如:report,添加聚合模块后的代码结构如下:
| | ├── module1
│ └── pom.xml
├── module2
│ └── pom.xml
├── module3
│ └── pom.xml
├── report
│ └── pom.xml
├── pom.xml
|
- 在项目根目录的“pom.xml”文件添加jacoco-maven-plugin插件,代码示例如下。
1
2
3
4
5
6
7
8
9
10
11
12
13 | <!-- 配置单元测试覆盖率-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
|
- 配置聚合模块的“pom.xml”文件。
以dependency形式引入所有依赖模块,并使用report-aggregate定义JaCoCo聚合目标。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | <dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>module1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>module2</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>module3</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<id>report-aggregate</id>
<phase>test</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
|
- 配置完成后,在项目根目录下执行mvn test,执行成功后会在“report/target/site/jacoco-aggregate”目录下生成各个模块的覆盖率报告。也可以在outputDirectory中自定义报告的输出路径:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | <plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<id>report-aggregate</id>
<phase>test</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
<configuration>
<outputDirectory>target/site/jacoco</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
|