简体   繁体   English

无法让Dokka在Gradle / Android项目上生成Kotlin文档

[英]Can't get dokka to generate kotlin docs on gradle/android project

I'm following the gradle plugin section in https://github.com/Kotlin/dokka . 我正在关注https://github.com/Kotlin/dokka中的gradle插件部分。

I also tried the dokka-gradle-example example in https://github.com/JetBrains/kotlin-examples/tree/master/gradle/dokka-gradle-example . 我还在https://github.com/JetBrains/kotlin-examples/tree/master/gradle/dokka-gradle-example中尝试了dokka-gradle-example示例。

The versions I'm using are: 我使用的版本是:

android: '23.1.1'
dokka: '0.9.6'
gradle-android-plugin: '1.5.0'
kotlin: '1.0.0-rc-1036'

but I also tried with Dokka versions from 0.9 up to 0.9.7. 但我也尝试使用0.9到0.9.7之间的Dokka版本。

The relevant parts of the output are: 输出的相关部分是:

...

:app:dokka FAILED
:app:dokka (Thread[Daemon worker Thread 9,5,main]) completed. Took 0.766 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dokka'.
> com.intellij.mock.MockComponentManager.getPicoContainer()Lorg/picocontainer/MutablePicoContainer;

* Try:
Run with --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:dokka'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:46)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: java.lang.NoSuchMethodError: com.intellij.mock.MockComponentManager.getPicoContainer()Lorg/picocontainer/MutablePicoContainer;
    at org.jetbrains.dokka.AnalysisEnvironment.createCoreEnvironment(AnalysisEnvironment.kt:78)
    at org.jetbrains.dokka.Utilities.DokkaModule.configure(DokkaModule.kt:50)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
    at com.google.inject.spi.Elements.getElements(Elements.java:110)
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at org.jetbrains.dokka.DokkaGenerator.generate(main.kt:160)
    at org.jetbrains.dokka.gradle.DokkaTask.generate(main.kt:63)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 54 more


BUILD FAILED

UPDATE 更新

I'm including the build files: 我包括了构建文件:

main build.gradle : 主要build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }

    ext.versions = [
            android: '23.1.1',
            anko: '0.8.2',
            dokka: '0.9.6',
            gradleAndroid: '1.5.0',
            kotlin: '1.0.0',
            spek: '0.1.194'
    ]

    dependencies {
        classpath "com.android.tools.build:gradle:$versions.gradleAndroid"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Module app/build.gradle : 模块app/build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:$versions.gradleAndroid"
        classpath "org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}"
    }

}

apply plugin: 'org.jetbrains.dokka'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

repositories {
    jcenter()
    maven {
        url "http://repository.jetbrains.com/all"
    }
}

android {
    sourceCompatibility = 1.5

    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        buildTypes {
            debug {
                testCoverageEnabled true
            }
        }
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
        test.java.srcDirs += 'src/test/kotlin'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.android.support:appcompat-v7:$versions.android"
    compile "com.android.support:design:$versions.android"
    compile "com.android.support:cardview-v7:$versions.android"

    compile "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin"

    compile "org.jetbrains.anko:anko-common:$versions.anko"
    compile "org.jetbrains.anko:anko-sdk15:$versions.anko"
    compile "org.jetbrains.anko:anko-support-v4:$versions.anko"
    compile "org.jetbrains.anko:anko-design:$versions.anko"
    compile "org.jetbrains.anko:anko-appcompat-v7:$versions.anko"
    compile "org.jetbrains.anko:anko-cardview-v7:$versions.anko"
    compile "org.jetbrains.anko:anko-recyclerview-v7:$versions.anko"
    compile "org.jetbrains.anko:anko-gridlayout-v7:$versions.anko"

    testCompile "org.jetbrains.spek:spek:$versions.spek"
    testCompile "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin"
}

dokka {
}

Try Kotlin 1.0.0 release, with latest Dokka 0.9.7 . 尝试使用最新的Dokka 0.9.7发布的Kotlin 1.0.0版本。 You have a mismatch there. 你那里不匹配。 The Kotlin plugin for Gradle and the Dokka versions must be compatible. Gradle的Kotlin插件和Dokka版本必须兼容。 If you continue to have a conflict, it could be that you have another plugin conflicting with those. 如果仍然存在冲突,则可能是您有另一个与此冲突的插件。

Dokka 0.9.8 or newer no longer will conflict with the Kotlin compiler version if different. 如果版本不同,则Dokka 0.9.8或更高版本不再与Kotlin编译器版本发生冲突。 It now contains what it needs embedded as shaded dependencies to avoid conflicts. 现在,它包含需要嵌入为阴影的依赖项以避免冲突的内容。

[UPDATE] This is reported as fixed with https://github.com/Kotlin/dokka/pull/64 . [更新]据报道,此问题已通过https://github.com/Kotlin/dokka/pull/64修复。


The problem is that the current version of dokka is unable to pick up the sourceSets defined within the android block of the build.gradle file. 问题是,dokka的当前版本是无法收拾的build.gradle文件的Android的块中定义的sourceSets。

To work around this until it is fixed (I'll create an issue on the dokka Github repository), you can duplicate the sourceSets outside of the android block so that dokka can figure it out. 要解决此问题,直到它解决(我将在dokka Github存储库上创建一个问题),您可以在android块之外复制sourceSets,以便dokka可以解决它。

android {
  ...

  sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
    test.java.srcDirs += 'src/test/kotlin'
  }
}

sourceSets {
  main.java.srcDirs += 'src/main/kotlin'
  test.java.srcDirs += 'src/test/kotlin
}

I had the same problem and this fixed it for me. 我遇到了同样的问题,这为我解决了。

The dokka documentation deals with Android separately: Dokka文档与Android分开处理:

If you are using Android there is a separate gradle plugin. 如果您使用的是Android,则有一个单独的gradle插件。 Just make sure you apply the plugin after com.android.library and kotlin-android. 只要确保您在com.android.library和kotlin-android之后应用该插件即可。

Try using classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${versions.dokka}" as a dependency and adding apply plugin: 'org.jetbrains.dokka-android' to the end of your plugin list, removing apply plugin: 'org.jetbrains.dokka' from the beginning. 尝试使用classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${versions.dokka}"作为依赖项,并在插件列表的末尾添加apply plugin: 'org.jetbrains.dokka-android' ,从一开始就删除apply plugin: 'org.jetbrains.dokka'

EDIT: This should be fixed, as noted in the comment below. 编辑:这应该是固定的,如下面的注释中所述。

You can generate Dokka documentatiton without Dokka plugin... Use GradleMavenPush , it has task androidDokka(type: Exec, dependsOn: dokkaInitializer) and task coreDokka(type: Exec, dependsOn: dokkaInitializer) 您可以在没有Dokka插件的情况下生成Dokka文档。使用GradleMavenPush ,它具有task androidDokka(type: Exec, dependsOn: dokkaInitializer)task coreDokka(type: Exec, dependsOn: dokkaInitializer)

apply from: 'https://raw.github.com/Vorlonsoft/GradleMavenPush/master/maven-push.gradle'

Don't forgot to set JAVADOC_BY_DOKKA = true 不要忘记设置JAVADOC_BY_DOKKA = true

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM