Azure Pipeline部署Mule应用时Maven报错:未知生命周期阶段"Dmaven.repo.local"
解决Azure Pipeline部署Mule应用时的Maven生命周期错误
嘿,我一眼就看到问题出在哪了——你的Maven任务配置里犯了几个小错误,导致Maven把JVM参数和拼写错误的属性当成了无效的生命周期阶段。咱们来一步步修好它:
错误详情
运行Pipeline时弹出的错误提示:
[ERROR] 未知生命周期阶段 "Dmaven.repo.local=/home/vsts/work/1/.m2/repository"。您必须指定有效的生命周期阶段或格式为<plugin-prefix>:<goal>或<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>的目标。可用的生命周期阶段包括:validate、initialize、generate-sources、process-sources、generate-resources、process-resources、compile、process-classes、generate-test-sources、process-test-sources、generate-test-resources、process-test-resources、test-compile、process-test-classes、test、prepare-package、package、pre-integration-test、integration-test、post-integration-test、verify、install、deploy、pre-clean、clean、post-clean、pre-site、site、post-site、site-deploy。 -> [Help 1]
你的现有配置
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>clx-salesforceupsert-ifa</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>mule-application</packaging> <name>clx-salesforceupsert-ifa</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <app.runtime>4.4.0-20220221</app.runtime> <mule.maven.plugin.version>3.5.4</mule.maven.plugin.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.0.0</version> </plugin> <plugin> <groupId>org.mule.tools.maven</groupId> <artifactId>mule-maven-plugin</artifactId> <version>${mule.maven.plugin.version}</version> <extensions>true</extensions> <configuration> <cloudHubDeployment> <uri>https://anypoint.mulesoft.com</uri> <server>${server}</server> <muleVersion>${app.runtime}</muleVersion> <applicationName>${app.name}</applicationName> <workers>${workers}</workers> <workerType>${workerType}</workerType> <environment>${environment}</environment> <objectStoreV2>true</objectStoreV2> </cloudHubDeployment> </configuration> <executions> <execution> <id>deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> <configuration> <classifier>mule-application</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-http-connector</artifactId> <version>1.6.0</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-sockets-connector</artifactId> <version>1.2.2</version> <classifier>mule-plugin</classifier> </dependency> </dependencies> <repositories> <repository> <id>anypoint-exchange-v3</id> <name>Anypoint Exchange</name> <url>https://maven.anypoint.mulesoft.com/api/v3/maven</url> <layout>default</layout> </repository> <repository> <id>mulesoft-releases</id> <name>MuleSoft Releases Repository</name> <url>https://repository.mulesoft.org/releases/</url> <layout>default</layout> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>mulesoft-releases</id> <name>MuleSoft Releases Repository</name> <layout>default</layout> <url>https://repository.mulesoft.org/releases/</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>
Azure Pipeline YAML配置(原错误版本)
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: https://aka.ms/yaml trigger: - master pool: vmImage: ubuntu-latest variables: - group: Build-Variable-Group - name: MAVEN_CACHE_FOLDER value: $(pipeline.workspace)/.m2/repository - name: MAVEN_OPTS value: 'Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)' steps: - task: Cache@1 inputs: key: pom.xml path: $(MAVEN_CACHE_FOLDER) displayName: Cache Maven Repo - task: DownloadSecureFile@1 name: settingsxml inputs: secureFile: 'settings.xml' - task: Powershell@2 inputs: targetType: 'inline' script: | New-Item -Type Directory -Force "${HOME}/.m2" Copy-Item -Force "$(settingsxml.secureFilePath)" "${HOME}/.m2/settings.xml" - task: Maven@3 inputs: mavenPomFile: 'pom.xml' mavenOptions: '-Xmx3072m' jdkVersionOption: '17.0.3' jdkArchitectureOption: 'x64' mavenAuthenticateFeed: true publishJUnitResults: false javaHomeOption: 'JDKVersion' mavenVersionOption: 'Default' effectivePomSkip: true goals: 'clean install package deploy $(MAVEN_OPTS) -DmuleDeploy -Dserver=$(server) Denvironment=$(environment) -Dworkers=$(workers) -DworkerType=$(workerType) -Dapp.runtime=$(app.runtime) -Dapp.name=$(app.name)' - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Pipeline.Workspace)' publishLocation: 'pipeline'
问题根源
- JVM参数放错位置:你把
$(MAVEN_OPTS)直接写在了goals参数里,Maven会把它当成一个生命周期阶段/目标,但MAVEN_OPTS是给JVM的参数,应该放在mavenOptions中。 - 属性拼写错误:
Denvironment=$(environment)少了一个减号,正确格式应该是-Denvironment=$(environment),这个错误让Maven把它当成了无效的生命周期阶段。 - MAVEN_OPTS定义错误:你的
MAVEN_OPTS变量值开头少了减号,应该是-Dmaven.repo.local=...而不是Dmaven.repo.local=...。
修正后的Azure Pipeline YAML
只需要修改两个地方:变量定义和Maven任务配置:
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. trigger: - master pool: vmImage: ubuntu-latest variables: - group: Build-Variable-Group - name: MAVEN_CACHE_FOLDER value: $(pipeline.workspace)/.m2/repository # 修正MAVEN_OPTS的定义,添加开头的减号 - name: MAVEN_OPTS value: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)' steps: - task: Cache@1 inputs: key: pom.xml path: $(MAVEN_CACHE_FOLDER) displayName: Cache Maven Repo - task: DownloadSecureFile@1 name: settingsxml inputs: secureFile: 'settings.xml' - task: Powershell@2 inputs: targetType: 'inline' script: | New-Item -Type Directory -Force "${HOME}/.m2" Copy-Item -Force "$(settingsxml.secureFilePath)" "${HOME}/.m2/settings.xml" - task: Maven@3 inputs: mavenPomFile: 'pom.xml' # 把MAVEN_OPTS合并到mavenOptions中 mavenOptions: '-Xmx3072m $(MAVEN_OPTS)' jdkVersionOption: '17.0.3' jdkArchitectureOption: 'x64' mavenAuthenticateFeed: true publishJUnitResults: false javaHomeOption: 'JDKVersion' mavenVersionOption: 'Default' effectivePomSkip: true # 移除MAVEN_OPTS,修正Denvironment为-Denvironment goals: 'clean install package deploy -DmuleDeploy -Dserver=$(server) -Denvironment=$(environment) -Dworkers=$(workers) -DworkerType=$(workerType) -Dapp.runtime=$(app.runtime) -Dapp.name=$(app.name)' - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Pipeline.Workspace)' publishLocation: 'pipeline'
这样调整后,Maven就能正确识别所有参数,不会再抛出未知生命周期阶段的错误,应该能顺利部署你的Mule应用到CloudHub了。
内容的提问来源于stack exchange,提问作者Niladri dey
相关产品推荐
相关产品推荐

