Maven 任务

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

使用此任务生成 Java 代码。

需求

生成代理必须具有以下功能:

  • Maven

YAML 代码片段

# Maven
# Build, test, and deploy with Apache Maven
- task: Maven@3
  inputs:
    #mavenPomFile: 'pom.xml' 
    #goals: 'package' # Optional
    #options: # Optional
    #publishJUnitResults: true 
    #testResultsFiles: '**/surefire-reports/TEST-*.xml' # Required when publishJUnitResults == True
    #testRunTitle: # Optional
    #allowBrokenSymlink: false # Optional. Has effect only when publishJUnitResults == True
    #codeCoverageToolOption: 'None' # Optional. Options: none, cobertura, jaCoCo. Enabling code coverage inserts the `clean` goal into the Maven goals list when Maven runs.
    #codeCoverageClassFilter: # Optional. Comma-separated list of filters to include or exclude classes from collecting code coverage. For example: +:com.*,+:org.*,-:my.app*.*
    #codeCoverageClassFilesDirectories: # Optional
    #codeCoverageSourceDirectories: # Optional
    #codeCoverageFailIfEmpty: false # Optional
    #javaHomeOption: 'JDKVersion' # Options: jDKVersion, path
    #jdkVersionOption: 'default' # Optional. Options: default, 1.14, 1.13, 1.12, 1.11, 1.10, 1.9, 1.8, 1.7, 1.6
    #jdkDirectory: # Required when javaHomeOption == Path
    #jdkArchitectureOption: 'x64' # Optional. Options: x86, x64
    #mavenVersionOption: 'Default' # Options: default, path
    #mavenDirectory: # Required when mavenVersionOption == Path
    #mavenSetM2Home: false # Required when mavenVersionOption == Path
    #mavenOptions: '-Xmx1024m' # Optional
    #mavenAuthenticateFeed: false 
    #effectivePomSkip: false 
    #sonarQubeRunAnalysis: false 
    #sqMavenPluginVersionChoice: 'latest' # Required when sonarQubeRunAnalysis == True# Options: latest, pom
    #checkStyleRunAnalysis: false # Optional
    #pmdRunAnalysis: false # Optional
    #findBugsRunAnalysis: false # Optional

参数

参数 描述
mavenPOMFile
Maven POM 文件
(从) 根目录到 Maven 库的"相对路径"POM 文件。 请参阅 POM 简介
默认值:pom.xml
参数别名: mavenPomFile
goals
目标 ()
(可选) 在大多数情况下,将此选项设置为 以编译代码,并 package 打包到 .war 文件中。 如果将此参数留空,生成将失败。 请参阅 Maven 生成生命周期简介
默认值:package
options
选项
(可选) 指定想要使用的任何 Maven 命令行选项。
publishJUnitResults
发布到Azure Pipelines
(必需) 选择此选项以将 Maven 生成生成的 JUnit 测试结果发布到Azure Pipelines。 每个测试结果文件匹配都将作为测试运行在 Test Results Files Azure Pipelines。
默认值:true
testResultsFiles
测试结果文件
(必需) 指定要发布的测试结果文件的路径和模式。 可以使用通配符 (获取) 。 例如, */TEST-.xml 对于名称以 开头的所有 XML 文件 TEST- 。 如果未指定根路径,则文件在默认工作目录下匹配,其值在 变量中可用:$ (System.DefaultWorkingDirectory) 。
例如,值为 ' /TEST- .xml"实际上会导致匹配 System.DefaultWorkingDirectory ($) / /TEST-.xml'.
默认值:**/surefire-reports/TEST-*.xml
testRunTitle
测试运行标题
(可选) 为测试运行提供名称。
allowBrokenSymbolicLinks
测试结果文件
(可选) 在发布测试期间任务遇到损坏的符号链接时,将 false 设置为生成失败。 只有在设置了 时 publishJUnitResults ,它才有效 true
默认值:true
参数别名: allowBrokenSymlink
codeCoverageTool
代码覆盖率工具
(可选) 选择代码覆盖率工具。 启用代码覆盖率在 Maven 运行时将目标 clean 插入到 Maven 目标列表中。
默认值: 无
参数别名: codeCoverageToolOption
classFilter
类包含/排除筛选器
(可选) 以逗号分隔的筛选器列表,以包含或排除收集代码覆盖率中的类。 For example: +:com.,+:org。,-:my.app
参数别名: codeCoverageClassFilter
classFilesDirectories
类文件目录
(可选) 多模块项目需要此字段。 指定从 Ma POM 文件ven 文件到包含类文件和存档文件的目录的相对路径的逗号分隔列表 (JAR、WAR 等) 。 针对这些目录中的类文件报告代码覆盖率。
例如:target/classes、target/testClasses。
参数别名: codeCoverageClassFilesDirectories
srcDirectories
源文件目录
(可选) 多模块项目需要此字段。 指定从 Maven 目录到源代码目录的相对路径POM 文件逗号分隔的列表。 代码覆盖率报表将使用这些代码来突出显示源代码。
例如:src/java、src/Test。
参数别名: codeCoverageSourceDirectories
failIfCoverageEmpty
缺少代码覆盖率结果时失败
(可选) 如果代码覆盖率未生成任何要发布的结果,生成失败。
默认值:false
参数别名: codeCoverageFailIfEmpty
javaHomeSelection
设置JAVA_HOME者
(必需) 设置JAVA_HOME选择将在生成过程中发现的 JDK 版本,或手动输入 JDK 路径, 请注意,如果已在代理计算机上安装 java,可以通过将"javaHomeOption"设置为"path"和"jdkDirectory"来指定它,作为 jdk 已安装目录的路径。
默认值:JDKVersion
参数别名: javaHomeOption
jdkVersion
JDK 版本
(可选) 将尝试发现所选 JDK 版本的路径,并相应地JAVA_HOME设置。
注意: 如果在未由 Microsoft 托管的代理上运行,并且请求的 Java 版本不是代理计算机上设置的 JAVA_HOME 变量指示的版本,则任务将依赖于变量 (例如) 来查找所需的 JAVA_HOME_8_X64 JDK。 确保此变量针对 JDK 的任何版本和体系结构(可能由此参数和/或 请求)在自承载代理上设置 jdkArchitecture
默认值:默认值
参数别名: jdkVersionOption
jdkUserInputPath
JDK 路径
(必需) 设置JAVA_HOME到给定路径。
参数别名: jdkDirectory
jdkArchitecture
JDK 体系结构
(可选) (可选) (JDK 的 x86、x64) 体系结构。
注意: 如果在未由 Microsoft 托管的代理上运行,并且请求的 Java 体系结构不是代理计算机上设置的 JAVA_HOME 变量指示的体系结构,则任务将依赖于变量 (例如) 来查找所需的 JAVA_HOME_8_X64 JDK。 确保此变量针对 JDK 的任何版本和体系结构(可能由此参数和/或 请求)在自承载代理上设置 jdkVersion
默认值:x64
参数别名: jdkArchitectureOption
mavenVersionSelection
Maven 版本
(必需) 使用默认 Maven 版本或指定自定义路径中的版本。
默认值:默认值
参数别名: mavenVersionOption
mavenPath
Maven 路径
(必需) 提供 Maven 安装路径的自定义 (例如 /usr/share/maven) 。
参数别名: mavenDirectory
mavenSetM2Home
设置M2_HOME变量
(必需) 将 M2_HOME 变量设置到自定义 Maven 安装路径。
默认值:false
mavenOpts
将MAVEN_OPTS设置为
(可选) 设置 MAVEN_OPTS 环境变量,该变量用于发送命令行参数以启动 JVM。 -Xmx 标志指定 JVM 可用的最大内存。
默认值:-Xmx1024m
参数别名: mavenOptions
mavenFeedAuthenticate
对内置 Maven 源进行身份验证
(必需) 会自动从 Azure Artifacts 对 Maven 源进行身份验证。 如果未使用内置 Maven 源,请取消选择此选项以提高生成速度。
默认值:false
参数别名: mavenAuthenticateFeed
skipEffectivePom
对内置源进行身份验证时跳过生成有效的 POM
(必需) 只使用 POM 对内置 Maven 源进行身份验证,允许 Azure Artifacts/Azure DevOps Server [包管理] 源中的父 POMs。
默认值:false
参数别名: effectivePomSkip
sqAnalysisEnabled
运行 SonarQube 或 SonarCloud 分析
(必需) 此选项已从 Maven 任务的第1版更改为使用 SonarQubeSonarCloud marketplace 扩展。 启用此选项可在 "目标" 字段中执行目标后运行SonarQube 或 SonarCloud 分析。 首先应运行 安装 目标。 还必须在此 Maven 任务之前,将 准备分析配置 任务从某个扩展添加到生成管道。
默认值:false
参数别名: sonarQubeRunAnalysis
sqMavenPluginVersionChoice 针对 Maven 版本<>SonarQube 扫描程序 需要 () 要使用的 SonarQube Maven 插件版本。 可以使用最新版本,也可以依赖于 pom.xml 中的版本。
默认值:最新
checkstyleAnalysisEnabled
运行 Checkstyle
(可选) 运行 Checkstyle 工具。 如果 pom.xml 文件中未指定 checkstyle 配置,将使用默认的 Sun 检查。 结果将作为生成项目进行上传。
默认值:false
参数别名: checkStyleRunAnalysis
pmdAnalysisEnabled
运行 PMD
(可选) 使用 PMD 静态分析工具查找代码中的 bug。 结果将作为生成项目进行上传。
默认值:false
参数别名: pmdRunAnalysis
findbugsAnalysisEnabled
运行 FindBugs
(可选) 使用 FindBugs 静态分析工具查找代码中的 bug。 结果将作为生成项目进行上传。
默认值:false
参数别名: findBugsRunAnalysis

重要

-q MAVEN_OPTS 中使用该选项时,不会正确生成有效的 pom,而且 Azure Artifacts 源可能无法通过身份验证。

示例

生成 Java 应用程序并将其部署到 Azure Web 应用

开源

此任务是GitHub 上的开放源代码。 欢迎提供反馈和建议。

常见问题解答

需要使用代理吗?

至少需要一个代理才能运行生成或发布。

我遇到了问题。 如何对其进行故障排除?

请查看排查生成和发布问题

我无法选择默认代理池,无法将生成或发布排队。 如何修复此问题?

请查看代理池

我的 NuGet 推送任务失败,出现“错误: 无法获取本地颁发者证书”错误。 如何解决此问题?

可通过添加受信任的根证书来解决此问题。 可将环境变量 NODE_EXTRA_CA_CERTS=file 添加到生成代理,也可在管道中添加任务变量 NODE.EXTRA.CA.CERTS=file。 有关此变量的更多详细信息,请参阅 Node.js 文档。 有关在管道中设置变量的说明,请参阅在管道中设置变量

我在本地使用 TFS,但没有看到其中某些功能。 为什么看不到?

其中某些功能仅在 Azure Pipelines 上可用,在本地尚不可用。 如果你已升级到最新版本的 TFS,则可在本地使用这些功能。