【问题标题】:bash script or Python to parse gradle dependenciesbash 脚本或 Python 来解析 gradle 依赖项
【发布时间】:2018-05-08 23:28:28
【问题描述】:

我正在寻找编写一个 bash 脚本来解析 gradle 构建文件并生成其中包含的依赖项列表。 我还需要考虑依赖版本号是变量(在根级 gradle 文件中定义。

任何有关我如何解决此问题的建议将不胜感激。谢谢。

示例 gradle:

apply plugin: 'com.android.application'

android {
  ....
}

dependencies {

  compile "com.android.support:design:$support"
  compile "com.android.support:cardview-v7:$support"
  compile "com.mixpanel.android:mixpanel-android:$mixpanel"
  compile "com.google.firebase:firebase-core:$playServices"
  compile 'io.reactivex:rxandroid:1.2.0'
}

示例输出:

com.android.support:design:25.3.1
com.android.support:cardview-v7:25.3.1
com.mixpanel.android:mixpanel-android:4.8.7
com.google.firebase:firebase-core:11.0.2
io.reactivex:rxandroid:1.2.0

【问题讨论】:

  • 有一个sed 命令,虽然很糟糕,但很有效,这取决于你想如何解决这个问题,我个人会创建一个小python脚本来用一个arg调用它。
  • 我考虑过使用 python(并且更喜欢它),但这将在我不完全确定是否有 python 的 jenkins 服务器上运行。所以我在考虑使用 bash 脚本来保证安全。
  • Python 预装在大多数 Linux 发行版中,
  • 嗯,这是真的.. 我会研究这个 sed 命令

标签: android python bash shell gradle


【解决方案1】:

为什么要重新发明轮子?

使用 gradle:

./gradlew app:dependencies [--configuration implementation]

你得到的树可能比你用脚本提取的要复杂得多。

【讨论】:

  • 我可以把它导出到一个txt文件吗?我的最终目标是拥有一个像我的示例输出一样的文本文件
  • 导出到文本文件./gradlew app:dependencies --configuration compile | tee file.txt
【解决方案2】:

使用这个:

#!/bin/bash
#
support="25.3.1"
mixpanel="4.8.7"
playServices="11.0.2"

results=$(grep compile input.txt | awk '{print $2}' | tr -d '"' | tr -d "'")
eval echo $results | sed 's/ /\n/g'
  • awk 删除编译字
  • 第一个 tr 删除了 "
  • 第二个 tr 删除了 '
  • eval 用变量的值替换变量
  • sed 将每行之间的空格替换为 \n

【讨论】:

  • 这会给我正确的输出......但变量定义不会在同一个文件中。它们将在根目录的 gradle 文件中
  • 然后将它们作为参数传递给该脚本。不知何故,你想要的值必须进入这个脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2018-03-06
  • 1970-01-01
  • 2018-05-12
  • 2015-02-23
  • 2015-03-03
相关资源
最近更新 更多