{"record":{"id":"9a7a8edf46ea03fe","repo":"apache/kafka","slug":"javadoc-jar-file-not-found-make-sure-the-java","errorCode":null,"errorMessage":"Javadoc JAR file not found: {}. Make sure the javadoc task has run first.","messagePattern":"Javadoc JAR file not found: (.+?)\\. Make sure the javadoc task has run first\\.","errorType":"validation","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"api-checker/gradle-plugins/src/main/java/org/apache/kafka/gradle/KafkaPublicApiCheckerTask.java","lineNumber":81,"sourceCode":"        setGroup(\"verification\");\n        setDescription(\"Checks consistency between javadoc HTML files and @InterfaceAudience.Public annotations across project JARs\");\n\n        // Set default values\n        enabled.convention(true);\n        failOnViolation.convention(true);\n        reportFile.convention(getProject().getLayout().getBuildDirectory().file(\"reports/kafka-public-api-checker.txt\"));\n    }\n\n    @TaskAction\n    public void checkPublicApi() {\n        if (!getCheckerEnabled().get()) {\n            getLogger().info(\"KafkaPublicApiChecker is disabled, skipping...\");\n            return;\n        }\n\n        File jarFile = getJavadocJarFile();\n        if (!jarFile.exists()) {\n            throw new GradleException(\"Javadoc JAR file not found: \" + jarFile.getAbsolutePath() +\n                \". Make sure the javadoc task has run first.\");\n        }\n\n        getLogger().info(\"Checking public API consistency in: {}\", jarFile.getAbsolutePath());\n\n        try {\n            if (projectJarFiles.getFiles().isEmpty()) {\n                throw new GradleException(\n                        \"No project JARs configured on kafkaPublicApiChecker.projectJarFiles — \"\n                        + \"the checker needs at least one classes/jar source to build the API surface.\");\n            }\n            PublicApiChecker checker = new PublicApiChecker(\n                new ArrayList<>(projectJarFiles.getFiles()),\n                new ArrayList<>(referenceJarFiles.getFiles()));\n            CheckResult result = checker.checkPublicApiConsistency(jarFile);\n            List<PublicApiViolation> violations = result.violations();\n            List<PublicApiViolation> suppressions = result.suppressions();\n","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/apache/kafka/blob/996fb4585aa1bcc8980b0e1b8d6b168b986cd979/api-checker/gradle-plugins/src/main/java/org/apache/kafka/gradle/KafkaPublicApiCheckerTask.java#L63-L99","documentation":"GradleException from KafkaPublicApiCheckerTask.checkPublicApi when the resolved javadoc jar path does not exist on disk. The public-API checker parses the javadoc jar to derive the API surface, so it must be present. The message tells the user to run the javadoc task first — the checker does not depend on it automatically unless wired.","triggerScenarios":"getJavadocJarFile().exists() returns false at line 80. Happens when the task runs before the javadocJar task (no task dependency wired), or when javadocJarPath points to a stale/wrong path, or in a clean checkout where javadoc has never been generated.","commonSituations":"Invoking kafkaPublicApiChecker directly without dependsOn(javadocJar); misconfiguring javadocJarPath to a path that is never produced; running on a fresh clone; disabling the javadoc task via -x javadocJar.","solutions":["Wire the dependency: tasks.named('kafkaPublicApiChecker') { dependsOn 'javadocJar' } so the jar is built first.","Run ./gradlew javadocJar then ./gradlew kafkaPublicApiChecker.","Confirm javadocJarPath resolves to the actual jar (default build/libs/<project>-<version>-javadoc.jar) — log it or print getJavadocJarFile().getAbsolutePath().","If javadoc generation itself is disabled, enable it for the checked module or set javadocJarPath to a checked-in reference jar."],"exampleFix":"// before\ntasks.named('kafkaPublicApiChecker') { /* no dependsOn */ }\n// after\ntasks.named('kafkaPublicApiChecker') {\n  dependsOn 'javadocJar'\n  javadocJarPath = tasks.named('javadocJar').flatMap { it.archiveFile }\n}","handlingStrategy":"validation","validationCode":"// In build.gradle\ntasks.named('kafkaPublicApiChecker') {\n  dependsOn 'javadocJar'\n  doFirst {\n    def f = javadocJarPath.get().asFile\n    assert f.exists(): \"javadoc jar missing at ${f}; dependsOn(javadocJar) should have built it\"\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always dependsOn 'javadocJar' from the checker task.","Point javadocJarPath at the producing task's archiveFile so Gradle tracks the dependency.","Do not run with -x javadocJar in CI."],"tags":["gradle","api-checker","javadoc","task-ordering"],"backgroundTag":null,"analyzedSha":"996fb4585aa1bcc8980b0e1b8d6b168b986cd979","analyzedAt":"2026-08-11T22:03:28.655Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}