Пользовательские метаданные в дескрипторе зависимости Gradle - PullRequest
0 голосов
/ 20 сентября 2018

Вот как я добавил зависимости в моем build.gradle

 // Dependency Versioning
    apply plugin: 'io.spring.dependency-management'
    dependencyManagement {
        imports {
            mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Edgware.RELEASE'
            mavenBom 'io.pivotal.spring.cloud:spring-cloud-services-dependencies:1.5.0.RELEASE'
            mavenBom 'org.springframework.boot:spring-boot-dependencies:1.5.15.RELEASE'

        }
        dependencies {

            dependency 'io.springfox:springfox-swagger2:2.8.0'
            dependency 'io.springfox:springfox-swagger-ui:2.8.0'

            dependency 'org.flywaydb:flyway-core:4.2.0'
            dependency 'com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8'
        }
    }

Я ищу добавить пользовательский номер для каждой зависимости.Этот номер является номером нашего утверждения, предоставленным нашей командой по архитектуре для утверждения использования этой зависимости на нашем предприятии.

Скажите, если моя команда по архитектуре утвердила использование зависимости io.springfox:springfox-swagger2:2.8.0 и если номер утверждения равен APPL-1054затем я должен добавить это число также как metadata вместе с тегом зависимости, с которым у меня будет другая задача gradle для использования этих чисел

что-то похожее на dependency 'io.springfox:springfox-swagger2:2.8.0' : APPL-1054

Пожалуйста, помогите с вашими идеями

1 Ответ

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

Вы можете установить утверждения на карте, а затем использовать разрешение зависимостей для проверки утверждений.Карта может исходить из какого-то веб-источника, если вы можете каким-то образом получить ее на карту.Вот простой пример

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        gradleApi()
    }
}

group 'com.stackoverflow'
version '1.0-SNAPSHOT'

repositories {
    jcenter()
}

configurations {
    audited.extendsFrom(compile)
}

Map<String, Object> approvedDeps = [
        'junit:junit:4.12': 'APPROVAL-1234'
]

dependencies {
    compile gradleApi()
    audited 'junit:junit:4.12'
    audited 'org.mockito:mockito-android:2.22.0'
}
dependencies {
    components {
        all { ComponentMetadataDetails details ->
            String requestedArtifact = "${details.id.group}:${details.id.name}:${details.id.version}"
            String approvalCode = approvedDeps[requestedArtifact]
            if (approvalCode == null) {
                throw new GradleException("Use of unapproved dependency (${requestedArtifact})")
            }
            logger.lifecycle("Requested dependency (${requestedArtifact}) is approved: ${approvalCode}")
            return details
        }
    }
}

// lets fake some action that would trigger dependency resolution
configurations.eachWithIndex { Configuration entry, int index ->
    if (entry.canBeResolved) {
        entry.resolve()
        print("Resolved index: ${index}")
    }

}

Теперь, если мы запустим ./gradlew clean build, мы получим ошибку, поскольку добавлена ​​неутвержденная зависимость.

$ ./gradlew clean build

> Configure project :
Requested dependency (junit:junit:4.12) is approved: APPROVAL-1234

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/jonstanford/dev/stackoverflow/q52427676/build.gradle' line: 36

* What went wrong:
A problem occurred evaluating root project 'q52427676'.
> Could not resolve all dependencies for configuration ':audited'.
   > There was an error while evaluating a component metadata rule for org.mockito:mockito-android:2.22.0.
      > Use of unapproved dependency (org.mockito:mockito-android:2.22.0)

* 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.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s

Конечно, вы можете переместить эту функциональность впользовательский плагин или что-то подобное, но я думаю, что основная идея верна.

...