【问题标题】:Cannot locate aar when build on azure pipeline在 Azure 管道上构建时无法找到 aar
【发布时间】:2021-03-27 15:48:42
【问题描述】:

我有一个使用 aar 文件的 Android 项目。它包含之前构建的颤振代码。 在我的 gradle 文件中有一个 aar 的相对路径:

...
repositories {
    maven { url '\''https://maven.fabric.io/public'\'' }
    maven { url '\''https://jitpack.io'\'' }
    maven { url '\''../../flutter_aar/build/host/outputs/repo'\''}
    maven { url '\''https://storage.googleapis.com/download.flutter.io'\''}
    flatDir(dirs: '\''libs'\'')
}
...

在本地构建项目一切正常。 现在我正在使用 azure 管道来构建这两个项目。 我在 azure 上的 yaml 是这样的:

# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/android
trigger:
  batch: true
  branches:
    include:
      - release-version-3.0
    exclude:
      - bug-*
      - master
      - develop

pool:
  vmImage: 'macos-latest'

variables: 
- group: TestApp.Mobile
- name: PAT
- name: FLUTTER_VERSION

steps:
- task: JavaToolInstaller@0
  displayName: Install JDK
  inputs:
    versionSpec: '8'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'PreInstalled'

- checkout: self
  submodules: true
  
- bash: |
   set -e
   set -x

   git clone -b 1.22.2 --single-branch https://github.com/flutter/flutter.git
   export PATH=`pwd`/flutter/bin:$PATH

   B64_PAT=$(printf ":generated_pat" | base64)

   git config --global credential.helper store
   git config --global user.name "test_user"
   git config --global http.extraheader "Authorization: Basic ${B64_PAT}"
   git clone -b development https://my_organization@dev.azure.com/base_arch/_git/flutter_aar
   cd flutter_aar
   
   flutter pub upgrade
   flutter build aar

   pwd
   ls -la

   cd ..
   pwd
   ls -la
   echo "$(cat app/build.gradle)"
  displayName: Build AAR

- task: Gradle@2
  displayName: Build Android App
  inputs:
    workingDirectory: '$(Build.SourcesDirectory)'
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx3072m'
    publishJUnitResults: false
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'assembleHomoProfile'

Gradle@2 任务执行时,构建失败,因为找不到项目。

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':app:compileHomoProfileJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':app:homoProfileCompileClasspath'.
   > Could not find com.project.flutter_aar:flutter_profile:1.0.
     Required by:
         project :app

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

我检查了项目是否存在以及它是否是通过单个ls -la 生成的。 文件没问题,但 gradle 构建坚持无法找到它们。 我还需要做其他配置或任务吗?

我已阅读链接:

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/publish-build-artifacts?view=azure-devops

【问题讨论】:

    标签: android azure flutter azure-pipelines


    【解决方案1】:

    Azure 代理中的文件夹结构可能与您的本地计算机不同。这将导致您在 gradle 文件中定义的相对路径在 azure 代理中不起作用。

    您可能已经知道所有管道任务的默认当前工作目录(即System.DefaultWorkingDirectory)是s 文件夹(即c:\agent_work\1\s)。您的 Android 项目源代码将下载到此 s 文件夹中。

    在上述管道中。 bash 任务也会在s 文件夹中克隆和构建flutter_aar 项目,这意味着flutter_aar 项目将作为子目录克隆到您的Android 项目中。文件夹结构如下:

    - s(Android project)
      - flutter_aar
      
    

    如果你本地机器上的flutter_aar项目和Android项目在同一级别,如下所示:

    - Mainfolder
      - flutter_aar
      - Android project
    

    那么 gradle 任务将无法在 azure 代理机器中找到项目。

    如果是这个问题的情况。您可以尝试以下解决方法:

    1、将Bash任务的工作目录改到s文件夹的上层,即Agent.BuildDirectory即。 c:\agent_work\1。见下文:

    - bash: |
       cd "$(Agent.BuildDirectory)"
       set -e
       set -x
       ...
    

    2,或者你可以尝试将gradle文件中的相对路径改为maven { url '\''../flutter_aar/build/host/outputs/repo'\''}

    【讨论】:

    • 就是这样。它找到项目并构建它。但不幸的是,它失败了这条消息:FAILURE: Build failed with an exception。 * 出了什么问题:任务 ':app:compileHomoProfileKotlin' 执行失败。 > 任务 :app:compileHomoProfileKotlin FAILED 我将在下一条评论中继续。
    • BUILD FAILED in 3m 47s 24 actionable tasks: 24 executed ##[debug]Exit code 1 received from tool '/Users/runner/work/1/s/gradlew' ##[debug]STDIO工具'/Users/runner/work/1/s/gradlew'的流已关闭错误:进程'/Users/runner/work/1/s/gradlew'失败,退出代码为1##[debug]taskRunner失败
    • 在 ExecState._setResult (/Users/runner/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4/2.178.0/node_modules/azure-pipelines-task-lib/toolrunner.js: 816:25) 在 ExecState.CheckComplete (/Users/runner/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4/2.178.0/node_modules/azure-pipelines-task-lib/toolrunner.js:799:18)在 ChildProcess. (/Users/runner/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4/2.178.0/node_modules/azure-pipelines-task-lib/toolrunner.js:721:19) 在 emitTwo (events.js:106:13) 在 ChildProcess.emit (events.js:191:7)
    • 在可能关闭 (internal/child_process.js:920:16) 在 Socket. (internal/child_process.js:351:11) 在 emitOne (events.js:96:13) 在Pipe._handle.close [as _onclose] (net.js:509:12) 处的 Socket.emit (events.js:188:7)
    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 2022-08-14
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2021-01-21
    相关资源
    最近更新 更多