[GRADLE-3169] Javadoc task "broken" in 2.1? Created: 15/Sep/14  Updated: 26/Nov/14  Resolved: 25/Nov/14

Status: Resolved
Project: Gradle
Affects Version/s: None
Fix Version/s: None

Type: Task
Reporter: Gradle Forums Assignee: Gary Hale
Resolution: Not A Bug Votes: 0


 Description   

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'



 Comments   
Comment by Gradle Forums [ 15/Sep/14 ]

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"
...
}
}

Comment by Dr. Gernot Starke [ 22/Nov/14 ]

This problem also occurs in Groovy-projects without java classes...

Workaround: create a public Java class with non-empty javadoc:

/**

  • gradle bug
    **/
    public class GradleBugWorkaround { int i; }

and put this in src/main/java...

Comment by Gary Hale [ 25/Nov/14 ]

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").

Comment by Dr. Gernot Starke [ 26/Nov/14 ]

but... javadoc task does not work for simple groovy (multi-)projects...

(when there is no public java class... groovy classes don't count...)

Comment by Gary Hale [ 26/Nov/14 ]

This sounds like a separate issue. Can you start a "problem" thread on the forums? We can look into it from there. Please describe your scenario (e.g. when you say you must create a public java class, does that mean you have non-public classes that you're generating javadocs for?). Include the Gradle version where the error first appeared as well as any error messages and stacktraces.

Generated at Wed Jun 30 12:41:47 CDT 2021 using Jira 8.4.2#804003-sha1:d21414fc212e3af190e92c2d2ac41299b89402cf.