maven-javadoc-plugin错误javadoc:错误-无法读取输入长度= 1,目录名称中包含非ASCII字符

时间:2018-11-23 15:08:50

标签: java maven maven-javadoc-plugin

我在Windows 10上使用OpenJDK11。我有一个非常简单的POM,用于生成Javadocs的单个Java文件。这是摘录:

<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>

奇怪的是,仅运行mvn clean package会导致错误:

[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

target/apidocs中只有三个文件:javadoc.batoptionspackagesoptions文件是最有趣的。它会在所有地方明确地说UTF-8。但请看以下几行:

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

该项目位于C:\projects\lição 1中。看来,沿着Java或Maven或Javadoc插件链的某个地方,目录名没有正确转换为UTF-8。

果然;当我在Windows中重命名目录以删除非ASCII字符时,mvn clean package正常工作。

这似乎是一个明显的错误;一旦Maven启动,所有内容都应该是UTF-8。 Javadoc插件有问题吗?任何人都知道这起源于何处?我应该在哪里提交故障单?还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

正如您所说,这看起来像用于将文件写入target/apidocs的编码。

仔细查看maven-javadoc-plugin的源代码,它只是在编写这些文件时使用平台编码-例如this line

在调用Maven时直接设置编码对我来说修复了上面的示例:

mvn clean package -Dfile.encoding=UTF-8

这虽然感觉更像是一种解决方法,而不是一个好的解决方法-它需要假设没有其他依赖于Maven构建中的平台编码。

我认为原因是主JDK在8到9之间发生了变化。解析参数文件(例如javadoc命令行中的@options)的代码段(实际上在javac下)已从使用切换为平台编码here来调用Files.newBufferedReader() hereFiles.newBufferedReader(Path)指出,如果未指定编码,它将使用UTF-8。这意味着在javac和javadoc中的参数文件现在都必须以UTF-8编码。