Подключаемый модуль Gradle для одного проекта. Не работает блок управления (Kotlin DSL). - PullRequest
0 голосов
/ 20 февраля 2020

Мне нужно изменить многопроектную сборку на однопроектную, поскольку в этом репо есть и будет только один проект. В настоящее время в settings.gradle у меня есть собственный плагин репо, который в настоящее время использует блок pluginManagement с resolutionStrategy и мой список репо:

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.namespace == 'com.meanwhileinhell.plugin') {
                useModule('com.meanwhileinhell:gradle-plugin:1.0.0-SNAPSHOT')
            }
        }
    }

    repositories {
        mavenLocal()
        maven { url "https://repo.spring.io/milestone" }
        maven { url "https://plugins.gradle.org/m2/" }

        // Meanwhileinhell repo
        maven {
            url "s3://mvn.meanwhileinhell.com/releases"
            credentials(AwsCredentials) {
                accessKey s3_access_key
                secretKey s3_access_secret
            }
        }
    }

    plugins {
        ...
        ...
    }
}

Однако, удаляя settings.gradle и перемещая этот блок в мой build.gradle.kts (Kotlin DSL), кажется, ничего не делает. Я попытался обернуть

configurations {
    all {
        resolutionStrategy {
            eachPlugin {
                ...
            }
        }
    }
}

, а также

settings {
    pluginManagement {
        resolutionStrategy {
            eachPlugin {
                ...
            }
        }
    }
}

Я нашел SO-ответ, который использовал settingsEvaluated, чтобы получить объект settings, но опять же это был не go.

В настоящее время мой build.gradle.kts выглядит следующим образом, без добавления какого-либо плагина из моего репо:

val springBootVersion: String by project

group = "com.meanwhileinhell.myapp"
version = "$version"

repositories {
    mavenCentral()
    mavenLocal()
    maven ("https://repo.spring.io/snapshot")
    maven ("https://repo.spring.io/milestone")
    maven ("https://plugins.gradle.org/m2/")

    maven {
        url = uri("s3://mvn.meanwhileinhell.com/releases")
        credentials(AwsCredentials::class) {
            accessKey = (project.property("s3_access_key") as String)
            secretKey = (project.property("s3_access_secret") as String)
        }
    }
}

plugins {
    base
    eclipse
    idea
    java
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
    // Load but don't apply to root project
    id("org.springframework.boot") version "1.5.14.RELEASE" apply false
}

dependencies {
    ...
}

Всякий раз, когда я пытаюсь добавить идентификатор плагина, например id("com.meanwhileinhell.plugin.hell2java") version "1.0.0-SNAPSHOT" Я получаю сообщение об ошибке, которое выглядит так, будто оно даже не отображается в моем местоположении S3:

* What went wrong:
Plugin [id: 'com.meanwhileinhell.plugin.hell2java', version: '1.0.0-SNAPSHOT'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'com.meanwhileinhell.plugin.hell2java:com.meanwhileinhell.plugin.hell2java.gradle.plugin:1.0.0-SNAPSHOT')
  Searched in the following repositories:
    Gradle Central Plugin Repository

Любая помощь по этому вопросу будет принята!

РЕДАКТИРОВАТЬ !!! ! -----------------------

Я только что нашел это в документации Gradle: https://docs.gradle.org/current/userguide/plugins.html#sec: plugin_management

Блок pluginManagement {} может появляться только в любом файле settings.gradle ....

Похоже, я ошибаюсь полностью, поэтому рассмотрим маршрут сценария инициализации.

1 Ответ

1 голос
/ 20 февраля 2020

Я думаю, что вы, возможно, что-то упустили в файловой структуре.

В Groovy DSL у вас есть следующие файлы:

  • build.gradle
  • settings.gradle
  • init.gradle

В Kotlin DSL у вас есть те же файлы, но с расширением .kts:

  • build.gradle.kts
  • settings.gradle.kts
  • init.gradle.kts

DSL Kotlin не отличается от Groovy DSL, где положить вещи. pluginManagement необходимо go в файл настроек, поэтому для Kotlin это будет settings.gradle.kts. Если вы сомневаетесь, посмотрите документацию. Почти во всех примерах кода вы можете переключаться между Groovy и Kotlin DSL, чтобы увидеть, как это сделать (и какие файлы они должны go в).

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