Сам плагин не может добавить зависимости buildscript и затем применить плагин dokka-android
Мы создали плагин GradleMavenPush, который выполняет загрузку артефактов (артефакты Gradle Android, артефакты Gradle Java и артефакты Gradle Kotlin) в репозитории Maven (JCenter, Maven Central, корпоративные серверы промежуточных / моментальных снимков и локальные репозитории Maven).
Сам плагин GradleMavenPush не может добавить зависимости buildscript и затем применить плагин dokka-android:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:0.9.17"
}
}
apply plugin: 'org.jetbrains.dokka-android'
Плагин с идентификатором org.jetbrains.dokka-android не найден.
Решение от Может ли плагин сам добавить зависимости buildscript, а затем применить плагин? также не работают:
apply plugin: 'groovy'
repositories {
jcenter()
}
dependencies {
compile gradleApi()
compile localGroovy()
compile "org.jetbrains.dokka:dokka-android-gradle-plugin:0.9.17"
}
apply plugin: 'org.jetbrains.dokka-android'
Плагин с идентификатором org.jetbrains.dokka-android не найден.
Не могли бы вы помочь?
2 ответа
Приведенные выше решения не работают для подключаемых модулей скриптов (только для бинарных подключаемых модулей)
Я реализовал собственное решение для поддержки Dokka в плагинах скриптов Gradle.
Для Android Java/Kotlin Projects:
task androidDokka(type: Exec) {
downloadFile('https://jcenter.bintray.com/org/jetbrains/dokka/dokka-fatjar/0.9.17/dokka-fatjar-0.9.17.jar', 'dokka-fatjar.jar')
def srcDirsNumber = android.sourceSets.main.java.srcDirs.size()
def classpathNumber = android.getBootClasspath().size()
def classpath = (classpathNumber > 0) ? android.getBootClasspath()[0] : ''
def javaAPISpecificationLink = getJavaAPISpecificationLink()
if (srcDirsNumber > 0) {
commandLine 'java', '-jar', "$buildDir/download/dokka-fatjar.jar",
android.sourceSets.main.java.srcDirs[0],
(srcDirsNumber == 2) ? android.sourceSets.main.java.srcDirs[1] : '',
(srcDirsNumber == 3) ? android.sourceSets.main.java.srcDirs[2] : '',
'-output', "$buildDir/javadoc", '-format', 'javadoc',
(classpathNumber > 0) ? '-classpath' : '', (classpathNumber > 0) ? classpath : '',
'-links', "https://developer.android.com/reference/^${android.sdkDirectory}/docs/reference/^${javaAPISpecificationLink}"
} else {
commandLine 'java', '-jar', "$buildDir/download/dokka-fatjar.jar"
}
}
task androidDokkaJar(type: Jar, dependsOn: androidDokka) {
classifier = 'javadoc'
from "$buildDir/javadoc"
}
Для других проектов Java / Kotlin (не Android):
task coreDokka(type: Exec) {
downloadFile('https://jcenter.bintray.com/org/jetbrains/dokka/dokka-fatjar/0.9.17/dokka-fatjar-0.9.17.jar', 'dokka-fatjar.jar')
def srcDirsNumber = sourceSets.main.java.srcDirs.size()
def javaAPISpecificationLink = getJavaAPISpecificationLink()
if (srcDirsNumber > 0) {
commandLine 'java', '-jar', "$buildDir/download/dokka-fatjar.jar",
sourceSets.main.java.srcDirs[0],
(srcDirsNumber == 2) ? sourceSets.main.java.srcDirs[1] : '',
(srcDirsNumber == 3) ? sourceSets.main.java.srcDirs[2] : '',
'-output', "$buildDir/javadoc", '-format', 'javadoc',
'-links', "${javaAPISpecificationLink}"
} else {
commandLine 'java', '-jar', "$buildDir/download/dokka-fatjar.jar"
}
}
task dokkaJar(type: Jar, dependsOn: coreDokka) {
classifier = 'javadoc'
from "$buildDir/javadoc"
}
Вы должны преобразовать свои почти 1000 строк кода плагинов скриптов в настоящий бинарный плагин Gradle. Для этого бинарного плагина вы можете указать зависимости, которые будут разрешаться всякий раз, когда ваш плагин добавляется как classpath
зависимость скрипта сборки Gradle. После этого вы можете просто применить другой плагин из вашего плагина, так как классы другого плагина будут доступны для вас.
Ссылка на обсуждение Gradle, которое вы предоставили, уже объясняет, почему у вас есть какая-то проблема с курицей или яйцом. Второй пример кода предоставляет возможные build.gradle
файл для вашего проекта плагина, его нельзя использовать напрямую в скрипте плагина.