插件本身不能添加buildscript依赖然后应用dokka-android插件
Plugin itself can't add buildscript dependencies and then apply dokka-android plugin
我们创建了 GradleMavenPush 执行上传工件的插件(Gradle Android 工件,Gradle Java 工件和 Gradle Kotlin 工件) 到 Maven 存储库(JCenter、Maven Central、企业 staging/snapshot 服务器和本地 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'
Plugin with id 'org.jetbrains.dokka-android' not found.
Can a plugin itself add buildscript dependencies and then apply a plugin? 的解决方案也不起作用:
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'
Plugin with id 'org.jetbrains.dokka-android' not found.
你能提供什么帮助吗?
您应该将近 1000 行脚本插件代码转换为真正的二进制 Gradle 插件。对于那个二进制插件,你可以指定依赖关系,只要你的插件被添加为 Gradle 构建脚本的 classpath
依赖关系,这些依赖关系就会被解析。从那以后,您可以简单地从您的插件中应用另一个插件,因为另一个插件的 类 将对您可用。
您提供的 Gradle 讨论的 link 已经解释了为什么您遇到先有鸡还是先有蛋的问题。第二个代码示例确实为您的插件项目提供了一个可能的 build.gradle
文件,它不能直接在脚本插件中使用。
以上解决方案不适用于 script gradle 插件(仅适用于二进制 gradle 插件)
我实现了自己的 solution for support Dokka in script gradle plugins。
对于 Android Java/Kotlin 个项目:
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"
}
我们创建了 GradleMavenPush 执行上传工件的插件(Gradle Android 工件,Gradle Java 工件和 Gradle Kotlin 工件) 到 Maven 存储库(JCenter、Maven Central、企业 staging/snapshot 服务器和本地 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'
Plugin with id 'org.jetbrains.dokka-android' not found.
Can a plugin itself add buildscript dependencies and then apply a plugin? 的解决方案也不起作用:
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'
Plugin with id 'org.jetbrains.dokka-android' not found.
你能提供什么帮助吗?
您应该将近 1000 行脚本插件代码转换为真正的二进制 Gradle 插件。对于那个二进制插件,你可以指定依赖关系,只要你的插件被添加为 Gradle 构建脚本的 classpath
依赖关系,这些依赖关系就会被解析。从那以后,您可以简单地从您的插件中应用另一个插件,因为另一个插件的 类 将对您可用。
您提供的 Gradle 讨论的 link 已经解释了为什么您遇到先有鸡还是先有蛋的问题。第二个代码示例确实为您的插件项目提供了一个可能的 build.gradle
文件,它不能直接在脚本插件中使用。
以上解决方案不适用于 script gradle 插件(仅适用于二进制 gradle 插件)
我实现了自己的 solution for support Dokka in script gradle plugins。
对于 Android Java/Kotlin 个项目:
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"
}