Вопрос или проблема
Я создаю многомодульный проект на Gradle, который пытается использовать buildSrc
для определения классов, свойств, функций и т. д. на Kotlin, которые могут быть использованы в скриптах сборки каждого из моих модулей.
Вот структура директории buildSrc
:
buildSrc
├── build.gradle.kts
└── src
└── main
└── kotlin
└── dokka
├── configureDocumentation.kt
├── Directory.kt
├── DocumentationManifest.kt
├── SourceSet.kt
├── TraditionalSourceRoot.kt
└── VisibilityDocSet.kt
В этом случае библиотека, которую я намерен использовать, находится по адресу buildSrc/src/main/kotlin/dokka
.
В buildSrc/build.gradle.kts
я включил плагин Dokka в разделе plugins
, ожидая, что это решит проблему:
plugins {
`kotlin-dsl`
id("org.jetbrains.kotlin.jvm") version "1.8.0"
id("org.jetbrains.dokka") version "1.7.20" <---- ОПРЕДЕЛЕНИЕ ПЛАГИНА
}
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
}
К сожалению, когда я пытаюсь скомпилировать код в buildSrc/src/main/kotlin/dokka
для последующего использования, я получаю множество ошибок неопределенных ссылок, относящихся к org.jetbrains.dokka
:
> Task :buildSrc:compileKotlin FAILED
e: .../buildSrc/src/main/kotlin/dokka/VisibilityDocSet.kt:3:55 Неопределённая ссылка: dokka
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:7:5 Неопределённая ссылка: tasks
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:7:34 Неопределённая ссылка: gradle
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:8:9 Неопределённая ссылка: dokkaSourceSets
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:10:17 Неопределённая ссылка: named
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:11:21 Неопределённая ссылка: sourceRoots
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:11:38 Неопределённая ссылка: file
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:12:21 Неопределённая ссылка: reportUndocumented
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:13:21 Неопределённая ссылка: skipEmptyPackages
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:14:21 Неопределённая ссылка: documentedVisibilities
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:17:17 Неопределённая ссылка: configureEach
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:18:21 Неопределённая ссылка: sourceRoots
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:18:38 Неопределённая ссылка: file
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:19:21 Неопределённая ссылка: reportUndocumented
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:20:21 Неопределённая ссылка: skipEmptyPackages
e: .../buildSrc/src/main/kotlin/dokka/configureDocumentation.kt:21:21 Неопределённая ссылка: documentedVisibilities
FAILURE: Сборка завершилась с ошибкой.
* Что пошло не так:
Произошла ошибка выполнения задачи ':buildSrc:compileKotlin'.
> Произошла ошибка при выполнении org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
> Ошибка компиляции. Смотрите журнал для подробностей
* Попробуйте:
> Запустите с опцией --stacktrace, чтобы получить трассировку стека.
> Запустите с опцией --info или --debug, чтобы получить больше информации из журнала.
> Запустите с опцией --scan, чтобы получить полные сведения.
> Получите дополнительную помощь по адресу https://help.gradle.org.
СБОРКА НЕУДАЧНА в 6s
3 выполненные задачи: 3 выполнены
Я новичок в использовании Gradle (особенно когда речь идет о многомодульных проектах и buildSrc
). Возможно, я не понимаю, как работает buildSrc
, или что-то упускаю при его правильной настройке.
Спасибо за вашу помощь заранее.
Ответ или решение
Ваша проблема, связанная с тем, что Gradle не распознает плагин Dokka в buildSrc
, может быть вызвана несколькими факторами. Давайте рассмотрим шаги, которые помогут вам исправить ситуацию.
1. Понимание buildSrc
buildSrc
– это специальная директория в проекте Gradle, которая позволяет вам создавать свои собственные плагины и классы для использования в других модулях вашего проекта. При этом следует помнить, что код в buildSrc
компилируется до того, как Gradle начинает обрабатывать ваши основные build-скрипты.
2. Установка зависимостей и плагинов
Проблема с тем, что ваши классы не могут найти org.jetbrains.dokka
, вероятно, связана с тем, что зависимости и плагины, определенные в buildSrc/build.gradle.kts
, недоступны в контексте компиляции исходного кода внутри buildSrc
.
3. Правильная конфигурация
Прежде всего, вам нужно убедиться, что плагин Dokka и другие необходимые зависимости доступны в классе buildSrc
. Для этого добавьте необходимые зависимости в buildSrc/build.gradle.kts
.
Вот как должен выглядеть ваш файл build.gradle.kts
в buildSrc
:
plugins {
`kotlin-dsl`
kotlin("jvm") version "1.8.0"
}
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
// Добавляйте необходимые зависимости для Dokka
implementation("org.jetbrains.dokka:dokka-core:1.7.20")
}
4. Импорт необходимых классов
В вашем исходном коде в buildSrc/src/main/kotlin/dokka
убедитесь, что вы импортируете необходимые классы из Dokka. Например:
import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.dokka.gradle.dokkaSourceSets
// и другие нужные импорты
5. Конфигурация плагина Dokka в основном проекте
Также убедитесь, что в вашем основном проекте (в build.gradle.kts
или аналогичном файле конфигурации) вы правильно применяете плагин Dokka и настраиваете его для работы с вашими модулями:
plugins {
id("org.jetbrains.dokka") version "1.7.20"
}
dokka {
outputFormat = "html"
outputDirectory = "$buildDir/dokka"
}
Заключение
После внесения вышеуказанных изменений попробуйте снова выполнить сборку вашего проекта. Убедитесь, что Gradle успешно собирает код в buildSrc
, и ваша конфигурация Dokka работает без ошибок. Если проблема все еще сохраняется, проверьте, нет ли опечаток в именах классов или путях к файлам и зависимостям.
Если у вас будут дополнительные вопросы или возникнут сложности, не стесняйтесь обращаться за помощью. Удачи в ваших начинаниях с Gradle и Dokka!