【问题标题】:How do I add Maven dependencies to Azure Pipelines如何将 Maven 依赖项添加到 Azure Pipelines
【发布时间】:2020-07-01 06:53:06
【问题描述】:

我正在尝试在 Azure Devops 中构建 Maven 构建管道。

我有一个项目的文件在其他几个项目之间共享(作为一组微服务项目),所以当我这样做时,该项目的 maven 编译会创建一个 .jar 文件(添加到我的本地 maven 存储库 .m2)我的笔记本电脑上的构建。我们现在可以称它为 shared.jar。 ​

然后,当我在笔记本电脑上编译微服务时,它们每个都依赖于我的 .m2 存储库中的 jar 文件。他们从那里获取依赖项和 Maven 构建(mvn clean install)。 ​

不幸的是,代码构建管道不维护本地 .m2 存储库。因此,当我尝试在每个微服务上执行“mvn clean install”时,它们无法找到 shared.jar,因此构建失败。 ​

我已经能够成功地将 .jar 文件添加到 Azure DevOps 下的 Feed 和 Artifact,但我似乎无法弄清楚如何将其拉入微服务构建中。

如何在我的 CI/CD Maven 构建管道中获取本地 jar 文件的依赖项并将其放入我的构建将找到的 maven 存储库?

我已尝试点击此链接:https://docs.microsoft.com/en-us/azure/devops/artifacts/get-started-maven?view=azure-devops

【问题讨论】:

    标签: java maven azure-devops azure-pipelines


    【解决方案1】:

    我们通过使用单独的 azure 管道来构建将其部署到 Azure 源的依赖项来做到这一点:

           variables: 
            - name: mavenRepoURL
              value: 'https://myorg.pkgs.visualstudio.com/myproject/_packaging/myfeed/maven/v1'
    
            - task: DownloadSecureFile@1
              name: mvnSettings
              displayName: 'Download Maven settings'
              inputs:
                secureFile: 'maven-azuredevops-settings.xml'
    
            - task: MavenAuthenticate@0
              displayName: Maven Authenticate Artifacts
              inputs:
                artifactsFeeds: 'myfeed'
    
            - task: Maven@3
              inputs:
                mavenPomFile: 'pom.xml'
                options: '-X -B -s $(mvnSettings.secureFilePath) -DWHERE="AzureDevops" -DremoteRepositories=$(mavenRepoUrl) clean deploy -U'
                mavenAuthenticateFeed: true
                publishJUnitResults: true
                testResultsFiles: '**/TEST-*.xml'
              
    

    请注意,出于安全原因,您的个人访问令牌不存储在版本控制中很重要,因此必须将其作为安全文件上传并在管道中下载。

    将依赖项添加到项目的 pom 中,正常使用它,但也配置了 Azure 提要

            <dependency>
                <groupId>com.foobar.blah</groupId>
                <artifactId>artifactId</artifactId>
                <version>2.0.2</version>
            </dependency>
    
            <profile>
                <id>AzureDevops</id>
                <activation>
                    <property>
                        <name>WHERE</name>
                        <value>AzureDevops</value>
                    </property>
                </activation>
                <properties>
                </properties>
                <distributionManagement>
                    <repository>
                        <id>myfeedname</id>
                        <url>https://myorg.pkgs.visualstudio.com/_packaging/myfeed/maven/v1</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </distributionManagement>
            </profile>
    
    

    警告:我对 maven 或 Azure 不太熟悉,所以有些事情可能不对。例如,我对项目而不是组织范围的提要有问题。见What are the equivalent maven commands and settings to upload and download azure artifacts?

    【讨论】:

      【解决方案2】:

      请检查以下项目:

      1. 确保在运行“mvn clean install”命令时,maven 读取 来自 ${user.home}/.m2 中的 settings.xml 文件的配置。
      2. &lt;server&gt;&lt;/server&gt;标签中检查id、用户名和密码。
      3. 请在运行“mvn clean install”之前删除所有文件并 .m2 文件夹中的文件夹。
      4. 通过添加 -X 或运行 maven install 命令时启用调试选项 --调试选项。

      【讨论】:

      • 我不知道我是否说清楚了,但是在我的笔记本电脑上运行的 mvn clean install 运行良好。 jar 文件被构建并保存在我的本地 .m2 中。然后,当我在微服务上运行 mvn clean install 时,它们会从我的依赖项中获取它。我无法开始工作的是在 Azure Devops Pipeline 中运行它(没有持久的本地 .m2)。所以微服务的构建无法访问我的jar文件。
      • @JimPassmore 您是否使用“mvn deploy”将您的 jar 文件正确部署到 Artifacts 部分?
      • 我相信是的。 Artifact 被添加并在 Azure Devops Artifacts 中可见,问题似乎在于它只是将 jar 文件放入其中。它并不是真正的 maven repo。它似乎没有在本地添加 .m2 目录中的其他内容(如元数据)。因此,当我尝试编译使用该 jar 的服务时,我得到:Could not find metadata com.xxx.service:yyy-shared:0.0.1-SNAPSHOT/maven-metadata.xml in local (/home/vsts/.m2 /存储库)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多