Есть ли способ извлечь URL проекта и последнюю доступную версию из зависимости gradle? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь извлечь информацию о зависимостях gradle из build.gradle и упаковать ее в строку JSON для использования в другом месте.

Небольшой пример того, что я пытаюсь сделать:

С app/build.gradle

android {
    ...
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
}

Я хотел бы получить (в JSON) что-то вроде этого:

...
{
    "name": "androidx.appcompat:appcompat",
    "source": "google",
    "installed": {
        "version": "1.0.0"
    },
    "latest": {
        "version": "1.1.0"
    }
    "projectUrl": "https://dl.google.com/dl/android/maven2/index.html",
    "license": "Apache 2.0 <http://www.apache.org/licenses/LICENSE-2.0>"
}
...

Пока мне удалось получить половину информации примерно так:

configurations {
    myConfig.extendsFrom implementation
}

task printSolvedDepsTreeInJson {
    doLast {
        def jsonOutput = "["
        configurations.myConfig.resolvedConfiguration.firstLevelModuleDependencies.each { dep ->
            def addToJson
            addToJson = { resolvedDep ->
                jsonOutput += "\n{\n"
                jsonOutput += "\t\"name\": \"${resolvedDep.module.id.group}:${resolvedDep.module.id.name}\",\n"
                if (resolvedDep.module.id.group.contains("android") || resolvedDep.module.id.group.contains("google")) {
                    jsonOutput += "\t\"source\": \"google\",\n"
                } else {
                    jsonOutput += "\t\"source\": \"jcenter\",\n"
                }
                jsonOutput += "\t\"installed\": {\n\t\t\"version\": \"${resolvedDep.module.id.version}\"\n\t},\n"
                jsonOutput += "},"
            }
            addToJson(dep)
        }
        if (jsonOutput[-1] == ',') {
            jsonOutput = jsonOutput[0..-2]
        }
        jsonOutput += "\n]"
        println jsonOutput
    }
}

Но я не могу найти никакой документации о том, как найти последнюю версию для зависимости gradle (иЯ знаю, что эта информация где-то есть, поскольку Android Studio выдает сообщение lint о более новой версии).Я также хотел бы включить URL-адрес для зависимости (например, ссылку на github, если она с открытым исходным кодом), что, опять же, я думаю, должно быть возможным, так как я нашел этот плагин gradle, который может генерировать JSON-отчет, который перечисляет веб-сайт проектаот .

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 20 сентября 2019

Почему бы не использовать именно тот плагин, который вы упомянули ( Плагин Gradle Versions Бен Мэнса ), который сделает работу за вас?Вы можете зависеть от задачи dependencyUpdates и затем анализировать выходные данные для использования в своем собственном отчете.

В противном случае вы можете посмотреть, как реализован этот плагин.Я полагаю, что он дублирует конфигурации, но с правилом разрешения зависимостей, которое заменяет версию динамическим объявлением latest.release (см. Документацию по этому здесь ), а затем позволяет Gradle разрешить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...