Dokka: Dokka fatJar resolution in Gradle plugin should use all resolution results

Created on 4 Jun 2018  路  8Comments  路  Source: Kotlin/dokka

I'm receiving this error when trying to build my project with Spring Auto Restdocs amongst a decent amount of other Spring tools. Here's a link to the issue I created in the Auto Restdocs repository. https://github.com/ScaCap/spring-auto-restdocs/issues/235. Google only returns one semi-related item which resulted in a fix to the code.

bug

Most helpful comment

Found such workaround:


repositories {
    mavenCentral()
    maven { url 'https://dl.bintray.com/kotlin/dokka' }
    maven { url 'https://jitpack.io' }
}

configurations {
    dokkaFatJar
}

dependencies {
    dokkaFatJar "org.jetbrains.dokka:dokka-gradle-plugin:0.9.16"
    dokkaFatJar "capital.scalable:spring-auto-restdocs-dokka-json:2.0.1"
}

apply plugin: 'org.jetbrains.dokka'

task repackDokka(type: Jar) {
    destinationDir = file("$buildDir/dokka-repack")
    baseName = "dokkaFatJarRepack"
    from configurations.dokkaFatJar.collect { zipTree(it) }
}

dokka {
    //.... more config
    dependsOn repackDokka
    dokkaFatJar = repackDokka.outputs.files.singleFile
    outputFormat = "auto-restdocs-json"
    //.... more config
}

This will pack custom Dokka fatjar locally, and then it will contain both custom-format classes & dokka ones

All 8 comments

Could you please provide a full stack trace? By running Gradle with --stacktrace option

Is this what you were looking for?

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dokka'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:103)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:596)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: org.jetbrains.dokka.DokkaBootstrapImpl
    at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63)
    at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:76)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:794)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:761)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
    ... 29 more
Caused by: java.lang.ClassNotFoundException: org.jetbrains.dokka.DokkaBootstrapImpl
    at org.jetbrains.dokka.gradle.DokkaTask.generate(main.kt:283)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    ... 42 more


* Get more help at https://help.gradle.org

BUILD FAILED in 4s
5 actionable tasks: 5 executed

Thank you! It's a bug on Dokka Gradle Plugin side, will fix

The problem lays at https://github.com/Kotlin/dokka/blob/master/runners/gradle-plugin/src/main/kotlin/main.kt#L189
This causes Dokka to use the only first file from provided fatJar class-path.

Hi,
We are evaluating Kotlin for use with Spring and have came across this issue. Is there a workaround we can use until this is fixed?

We are trying to compare this to our current Java/Maven equivalent.

Found such workaround:


repositories {
    mavenCentral()
    maven { url 'https://dl.bintray.com/kotlin/dokka' }
    maven { url 'https://jitpack.io' }
}

configurations {
    dokkaFatJar
}

dependencies {
    dokkaFatJar "org.jetbrains.dokka:dokka-gradle-plugin:0.9.16"
    dokkaFatJar "capital.scalable:spring-auto-restdocs-dokka-json:2.0.1"
}

apply plugin: 'org.jetbrains.dokka'

task repackDokka(type: Jar) {
    destinationDir = file("$buildDir/dokka-repack")
    baseName = "dokkaFatJarRepack"
    from configurations.dokkaFatJar.collect { zipTree(it) }
}

dokka {
    //.... more config
    dependsOn repackDokka
    dokkaFatJar = repackDokka.outputs.files.singleFile
    outputFormat = "auto-restdocs-json"
    //.... more config
}

This will pack custom Dokka fatjar locally, and then it will contain both custom-format classes & dokka ones

Hi there,

We are looking into using Spring Auto Rest Docs for a Spring + Kotlin project and have the same issue. Are there any new updates besides the suggested workaround.

Thanks,
Antoniya

@semoro This doesn't work with 0.10.1 Dokka version, there is no dokkaFatJar property anymore.
Do we need to use dokkaRuntime instead of dokkaFatJaror there is other way of doing it?

dependencies {
    dokkaRuntime...
}

When I try it with dokkaRuntime I always get:

Caused by: org.jetbrains.dokka.Utilities.ServiceLookupException: No implementation with name my-cool-format found in category format

To reproduce you can just create dummy format name and point it to any existing FormatDescriptor classes. Pack that new format config into the fat jar and add as a dependency to dokkaRuntime.
This approach with dokkaRuntime based on docs here:
https://www.kotlinresources.com/library/dokka/
https://github.com/Kotlin/dokka

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jaguililla picture jaguililla  路  4Comments

norswap picture norswap  路  4Comments

martinkocjan-tomtom picture martinkocjan-tomtom  路  6Comments

balanegrero picture balanegrero  路  5Comments

mikeholler picture mikeholler  路  3Comments