«Неразрешенная ссылка: реализация» с использованием подпроектов в kotlin-gradle - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу разделить свой проект на подпроекты. Настройка Gradle по умолчанию в Intellij IDE:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.3.50"
}

group = "project"
version = "0.0.1-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

Эта настройка компилируется. Но я не хочу повторять этот код в каждом подпроекте. Поэтому я изменил build.gradle.kts на

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

subprojects {
    plugins {
        kotlin("jvm") version "1.3.50"
    }

    group = "project"
    version = "0.0.1-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    dependencies {
        implementation(kotlin("stdlib-jdk8"))
    }

    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
}

, но получаю исключение:

e: C:\[...]\build.gradle.kts:1:12: Unresolved reference: jetbrains
e: C:\[...]\build.gradle.kts:16:9: Unresolved reference: implementation
e: C:\[...]\build.gradle.kts:19:20: Unresolved reference: KotlinCompile
e: C:\[...]\build.gradle.kts:19:35: Type mismatch: inferred type is () -> Unit but Class<TypeVariable(S)!>! was expected
e: C:\[...]\build.gradle.kts:20:9: Unresolved reference: kotlinOptions

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\[...]\build.gradle.kts' line: 1

* What went wrong:
Script compilation errors:

  Line 01: import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
                      ^ Unresolved reference: jetbrains

  Line 16:         implementation(kotlin("stdlib-jdk8"))
                   ^ Unresolved reference: implementation

  Line 19:     tasks.withType<KotlinCompile> {
                              ^ Unresolved reference: KotlinCompile

  Line 19:     tasks.withType<KotlinCompile> {
                                             ^ Type mismatch: inferred type is () -> Unit but Class<TypeVariable(S)!>! was expected

  Line 20:         kotlinOptions.jvmTarget = "1.8"
                   ^ Unresolved reference: kotlinOptions

5 errors

* 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 1s

Я думаю, что есть простая синтаксическая ошибка, но я не могу ее найти...

Большое спасибо!

1 Ответ

1 голос
/ 02 ноября 2019

Не уверен, что вы также не получаете сообщение об ошибке, вкладывая блок plugins { } в subprojects { } Как указано в Ограничения плагинов DSL :

Блок plugins {} также должен быть оператором верхнего уровня в buildscript. Он не может быть вложен в другую конструкцию (например, оператор if или for-loop).

Поэтому, чтобы исправить ваши проблемы, переместите plugins {} наверх и обязательно примените плагины в *Блок 1013 *:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.3.50" apply false
}

subprojects {
    apply {
        plugin("org.jetbrains.kotlin.jvm")
    }

    group = "project"
    version = "0.0.1-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    val implementation by configurations

    dependencies {
        implementation(kotlin("stdlib-jdk8"))
    }

    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
}

Подробнее о apply false можно прочитать в разделе Сведения о методе из PluginDependenciesSpec, тип / область действияблок plugins {}.

Подробнее о val implementation by configurations вы можете прочитать в Понимание того, что делать, когда нет доступа к модели с безопасной типовой моделью

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