maven-javadoc-plugin error javadoc: error - cannot read Input length = 1 with non-ASCII characters in directory name
Asked Answered
L

2

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?

Larkspur answered 23/11, 2018 at 15:8 Comment(5)
First you have defined the source encoding ...the question is which encoding is given to the JVM which is used by Maven? issues.apache.org/jira/projects/MJAVADOC ?Frisky
Have you tried to add <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> to <properties> block?Ichor
Can you provide me some reference to what this is supposed to do, or is this a guess of something you haven't tried?Larkspur
Note that 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.Larkspur
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?Larkspur
G
4

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.

Generative answered 28/11, 2018 at 22:1 Comment(3)
It would seem to me this is indeed a bug. Any idea where we can file bugs for the Maven Javadoc Plugin?Larkspur
There's details about their issue tracker in Jira here. Can't spot anything obvious already there.Generative
OK, I've filed MJAVADOC-581.Larkspur
B
0

This maven build error was caused by adding some illegal argument in the plugin definition. For example, I used a "filter" element and it turned out that the Spring Boot version I was using did not recognize this argument resulting in an obscure "Length=1" error as you posted in the headline. By removing the illegal argument and problem was cleared.

Beaumarchais answered 27/4, 2022 at 22:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.