Javadoc task "broken" in 2.1?

Gant javadoc task works fine in Gradle 2.0 but fails using 2.1. I cannot see anything in the release notes that would imply build gradle changes were required.

  • Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ‘:gant:javadoc’.

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.cli.RunBuildAction.run(RunBuildAction.java:51)

at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)

at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)

at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)

at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)

at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)

at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)

at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)

at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)

at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)

at org.gradle.launcher.Main.doAction(Main.java:33)

at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)

at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)

at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)

at org.gradle.launcher.GradleMain.main(GradleMain.java:23) Caused by: org.gradle.api.GradleException: Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): ‘/home/users/russel/Repositories/Git/Masters/Gant/gant/build/tmp/javadoc/javadoc.options’

at org.gradle.api.tasks.javadoc.internal.JavadocGenerator.execute(JavadocGenerator.java:55)

at org.gradle.api.tasks.javadoc.internal.JavadocGenerator.execute(JavadocGenerator.java:31)

at org.gradle.api.tasks.javadoc.Javadoc.executeExternalJavadoc(Javadoc.java:141)

at org.gradle.api.tasks.javadoc.Javadoc.generate(Javadoc.java:129)

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)

… 44 more Caused by: org.gradle.process.internal.ExecException: Process ‘command ‘/home/users/russel/lib.Linux.x86_64/jdk1.8.0_20/bin/javadoc’’ finished with non-zero exit value 1

at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365)

at org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:31)

at org.gradle.api.tasks.javadoc.internal.JavadocGenerator.execute(JavadocGenerator.java:52)

… 55 more

The “generated javadoc options” file contains:

-author

-classpath ‘/home/users/russel/Repositories/Git/Masters/Gant/gant/build/classes/main:/home/users/russel/Repositories/Git/Masters/Gant/gant/build/resources/main:/home/users/russel/.m2/repository/common s-cli/commons-cli/1.2/commons-cli-1.2.jar:/home/users/russel/.gradle/caches/modules-2/files-2.1/org.apache.ant/ant/1.9.4/6d473e8653d952045f550f4ef225a9591b79094a/ant-1.9.4.jar:/home/users/russel/.m2/r epository/org/codehaus/groovy/groovy-all/2.4.0-SNAPSHOT/groovy-all-2.4.0-SNAPSHOT.jar:/home/users/russel/.gradle/caches/modules-2/files-2.1/org.apache.ant/ant-launcher/1.9.4/334b62cb4be0432769679e8b94 e83f8fd5ed395c/ant-launcher-1.9.4.jar’ -d ‘/home/users/russel/Repositories/Git/Masters/Gant/gant/build/docs/javadoc’ -doctitle ‘Gant 1.9.12-SNAPSHOT’ -encoding ‘UTF-8’ -footer ‘Copyright © 2006–2013 The Codehaus. All Rights Reserved.’ -private

-quiet

-overview ‘overview.html’ -use

-version

-windowtitle ‘Gant 1.9.12-SNAPSHOT’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/gant/TargetExecutionException.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/gant/GantException.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/gant/MissingTargetException.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/gant/TargetMissingPropertyException.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/org/codehaus/gant/GantMetaClass.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/org/codehaus/gant/GantState.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/org/codehaus/gant/GantBuilder.java’ ‘/home/users/russel/Repositories/Git/Masters/Gant/src/main/groovy/org/codehaus/gant/ant/Gant.java’

I can reproduce the behavior with the Gant project switching between 2.0 and 2.1. I’ll open an issue and investigate.

In the meantime, I was able to work around the problem by setting the overview to an absolute path:

javadoc {
  options {
    overview "${rootDir.path}/overview.html"
    ...
  }
}

Russell, is there any output from the Javadoc tool about what went wrong? Stacktrace isn’t too helpful in this case.

Just to follow up on this, prior to 2.1 the working directory for the javadoc process was set to the root project directory, which was incorrect. This was fixed in 2.1 so that the working directory would be set to the project directory instead, which is correct. This difference was not an issue for single project builds, but did affect multi-project builds.

The Gant build was injecting the javadoc configuration into its subprojects setting the overview to “overview.html” (relative to the root project) which happened to work properly with the working dir set to the root project directory. When this fix was made in 2.1, it was then looking for the file relative to each subproject directory instead, which is what caused the breakage.

The “workaround” above is actually the proper configuration. Relative paths for the javadoc configuration will be resolved relative to the project directory. Referencing files outside of that directory need to either be specified with an absolute path or with an appropriate relative path (e.g. “…/overview.html”).