TLDR:
How do I find the source files mentioned in a gradlew someTask --stacktrace
?
Details:
I’m trying to build a javadoc for an Android library I made using gradle. I see no official documentation on how to do this, but there are some very dated examples here on SO. I tried the popular answers, but no luck. So I’m trying to debug why these answers no longer work.
So here is my task (from the previously linked SO question’s answer)
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
destinationDir = file("../javadoc/")
failOnError false
}
located in ./libs/abcvlib/build.gradle
where ./ is my project root directory.
I run ./gradlew javadoc
from the project root directory and get:
Task :abcvlib:javadoc FAILED
FAILURE: Build failed with an exception.
* What went wrong: Execution failed for task ':abcvlib:javadoc'.
> path may not be null or empty string. path=''
Now, the purpose of this question is not just to answer “What path=””?, but also, how would I find the answer to this question myself.
If I use --stacktrace
I see
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':abcvlib:javadoc'.
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:338)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:325)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:318)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:304)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
Caused by: java.lang.IllegalArgumentException: path may not be null or empty string. path=''
at org.gradle.api.internal.file.AbstractBaseDirFileResolver.doResolve(AbstractBaseDirFileResolver.java:59)
at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:74)
at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:48)
...
Ok, so what do I do now? Where can I find the source for the .java files mentioned above such that I can find where this empty path parameter is causing an issue? If I can’t find the source, I’m at a roadblock for helping myself.
Furthermore, where can I find the API, or source for the code used in the task itself? For example, what does android
in android.sourceSets.main.java.srcDirs
resolve to? I assume this means the Gradle plugin for Android, but I honestly have no idea how to verify this. In any other language I’d have some editor that would have tooltips or some quickkey showing me where the definition for this is located. I could go inspect the source code for it, find all possible variables or whatever you call sourceSets
as it pertains to android
, and how main
pertains to sourceSets
and so on.
Yes, I can read through the entire gradle documentation, and become a gradle expert, but this is not something I will be doing regularly, so hoping you can point me to some specific documentation regarding this topic.
Thanks in advance!