[ https://issues.apache.org/jira/browse/MJAVADOC-736?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henning Schmiedehausen updated MJAVADOC-736: -------------------------------------------- Labels: jpms (was: ) > Plugin fails to detect module descriptor if mvn clean run during initialize > phase > --------------------------------------------------------------------------------- > > Key: MJAVADOC-736 > URL: https://issues.apache.org/jira/browse/MJAVADOC-736 > Project: Maven Javadoc Plugin > Issue Type: Bug > Affects Versions: 3.4.1 > Environment: macOS 12.6, JDK 19 (installed via homebrew), Apache > Maven 3.8.6 > Reporter: Daniel Widdis > Priority: Major > Labels: jpms > > When the clean goal of maven-clean-plugin is invoked during the initialize > phase, maven-javadoc-plugin fails to find the module descriptor. Analysis of > the search logic reveals that if an output directory exists, but either a jar > doesn't exist or the jar does not contain an Automatic-Module-Name, the mojo > never reaches the code branch where a module descriptor is searched for. > Steps to reproduce: > # Create a simple project with a module-info.java file, but no automatic > module name. > # Invoke the `clean` goal of `maven-clean-plugin` during the initialize > phase (either automatically in pom, or by running `mvn clean`) > # Run `mvn javadoc:javadoc` or `mvn javadoc:jar` > Expected result: > {{[INFO] — maven-javadoc-plugin:3.4.1:javadoc (default-cli) @ foo ---}} > {{[INFO] Configuration changed, re-generating javadoc.}} > {{[INFO] > ------------------------------------------------------------------------}} > {{[INFO] BUILD SUCCESS}} > Actual result: > {{[INFO] — maven-javadoc-plugin:3.4.1:javadoc (default-cli) @ foo ---}} > {{[ERROR] Creating an aggregated report for both named and unnamed modules is > not possible.}} > {{[ERROR] Ensure that every module has a module descriptor or is a jar with a > MANIFEST.MF containing an Automatic-Module-Name.}} > {{[ERROR] Fix the following projects:}} > {{[ERROR] - foo:foo}} > Minimal reproducer project: [https://github.com/dbwiddis/foo] > Probable source of the error: > [https://github.com/apache/maven-javadoc-plugin/blob/master/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java#L4999-L5096] > In AbstractJavadocMojo beginning at line 4999, a list of unnamedProjects is > created. It is added to on line 5070 when `result` shows a failure to find > the module descriptor. > There are two chances to set result, one at line 5014 (searching for > automatic module name in the jar) and one at line 5037 (searching for module > descriptor). However, these two options are in an if/else block conditioned > on the presence of the artifact file (directory), so if that value is not > null, the second check never occurs. > Following the getClassesFile() logic (called from line 5008, executing line > 1709) we see in line 1737 that if the output directory exists, that directory > is returned and the code never reaches the null return at line 1741. > Possible fix: replace the if/else conditional with an if conditional, and > condition the second branch (currently "else") to be a second check on > whether `result` is null. > -- This message was sent by Atlassian Jira (v8.20.10#820010)