Блок управления плагином Gradle для одного проекта не работает (Kotlin DSL)

Мне нужно изменить сборку с несколькими проектами на сборку с одним проектом, так как в этом репозитории есть и будет только один проект. В настоящее время в 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 {
                ...
            }
        }
    }
}

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

В настоящее время мой 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....

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


person MeanwhileInHell    schedule 20.02.2020    source источник


Ответы (1)


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

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

  • build.gradle
  • настройки .градле
  • init.градле

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

  • build.gradle.kts
  • настройки.gradle.kts
  • init.gradle.kts

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

person Bjørn Vester    schedule 20.02.2020
comment
Спасибо за ваш комментарий @BjørnVester. Разве файл settings.gradle[.kts] не используется только для многопроектных сборок? - person MeanwhileInHell; 20.02.2020
comment
Он у меня всегда есть, даже для отдельных проектов. Еще одна вещь, которую вы можете изменить, — это имя проекта (если вы не хотите полагаться на имя папки по умолчанию). - person Bjørn Vester; 20.02.2020