6

I'm using OpenJDK 11 on Windows 10. I have a very simple POM, for a single Java file, that generates Javadocs. Here is an extract:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>11</maven.compiler.source>
  <maven.compiler.target>11</maven.compiler.target>
</properties>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.0.1</version>
      <executions>
        <execution>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Strangely just running mvn clean package causes an error:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.0.1:jar (default) on project foobar: MavenReportException: Error while generating Javadoc:
[ERROR] Exit code: 1 - javadoc: error - cannot read Input length = 1
[ERROR]
[ERROR] Command line was: C:\bin\jdk-11\bin\javadoc.exe @options @packages

In target/apidocs there are only three files: javadoc.bat, options, and packages. The options file is the most interesting. It explicitly says UTF-8 everywhere, as it should. But look at these lines:

-sourcepath
C:/projects/li��o 1/src/main/java

This project is in C:\projects\lição 1. It appears that somewhere along the chain Java or Maven or the Javadoc plugin didn't correctly convert the directory name to UTF-8.

Sure enough; when I renamed the directories in Windows to remove non-ASCII characters, mvn clean package worked just fine.

This would seem like a blatant bug; once Maven starts, everything should be UTF-8 throughout. Is it a problem with the Javadoc plugin? Anyone have an idea where this originates? Where should I file a bug ticket? Or am I doing something wrong?

Garret Wilson
  • 14,167
  • 20
  • 115
  • 211
  • First you have defined the source encoding ...the question is which encoding is given to the JVM which is used by Maven? https://issues.apache.org/jira/projects/MJAVADOC/ ? – khmarbaise Nov 23 '18 at 15:14
  • Have you tried to add `UTF-8` to `` block? – Mikhail Kholodkov Nov 27 '18 at 17:17
  • Can you provide me some reference to what this is supposed to do, or is this a guess of something you haven't tried? – Garret Wilson Nov 27 '18 at 22:11
  • Note that https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html is clear that `encoding` defaults to `project.build.sourceEncoding`. But we're talking about the interpretation of directory names. I think this is a bug. – Garret Wilson Nov 27 '18 at 22:13
  • Mikhail, `docencoding` (which is the configuration that uses the `project.reporting.outputEncoding` you referred to) specifies to the _output_ encoding. How would this have anything to do with the encoding of the directory names the plugin places in the `options` file? Have you actually reproduced this on your machine? Have you actually seen this `options` file I'm talking about? Do you understand the problem? – Garret Wilson Nov 27 '18 at 22:15

1 Answers1

3

As you say, this looks like the encoding used to write the files to target/apidocs.

Looking through the source for the maven-javadoc-plugin, it is just using the platform encoding when writing these files - e.g. this line.

Directly setting the encoding while calling Maven repaired the example above for me:

mvn clean package -Dfile.encoding=UTF-8

This feels more like a workaround than a good fix though - it needs to assume there is nothing else depending on the platform encoding in the Maven build.

I think the cause is a change in the main JDK between 8 and 9. The bit of code (actually under javac) that parses the argument files (e.g. @options in the javadoc command line) has switched from using the platform encoding here to calling Files.newBufferedReader() here. Files.newBufferedReader(Path) states that it uses UTF-8 if the encoding is not specified. This means argument files, in both javac and javadoc, must now be encoded in UTF-8.

df778899
  • 10,135
  • 1
  • 18
  • 32
  • It would seem to me this is indeed a bug. Any idea where we can file bugs for the Maven Javadoc Plugin? – Garret Wilson Nov 29 '18 at 16:16
  • There's details about their issue tracker in Jira [here](https://maven.apache.org/plugins/maven-javadoc-plugin/issue-tracking.html). Can't spot anything obvious already there. – df778899 Nov 29 '18 at 22:00
  • OK, I've filed [MJAVADOC-581](https://issues.apache.org/jira/browse/MJAVADOC-581). – Garret Wilson Mar 03 '19 at 00:30