【问题标题】:maven-javadoc-plugin error javadoc: error - cannot read Input length = 1 with non-ASCII characters in directory namemaven-javadoc-plugin error javadoc: error - cannot read Input length = 1 with non-ASCII characters in directory name
【发布时间】:2018-11-23 15:08:50
【问题描述】:

我在 Windows 10 上使用 OpenJDK 11。我有一个非常简单的 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插件有问题吗?有人知道这起源于哪里吗?我应该在哪里提交错误票?还是我做错了什么?

【问题讨论】:

  • 首先你已经定义了源编码......问题是哪个编码被赋予了 Maven 使用的 JVM? issues.apache.org/jira/projects/MJAVADOC ?
  • 您是否尝试将&lt;project.reporting.outputEncoding&gt;UTF-8&lt;/project.reporting.outputEncoding&gt; 添加到&lt;properties&gt; 块?
  • 你能给我提供一些关于这应该做什么的参考,或者这是你没有尝试过的猜测吗?
  • 请注意maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html 很明显encoding 默认为project.build.sourceEncoding。但我们谈论的是目录名称的解释。我认为这是一个错误。
  • Mikhail, docencoding (这是使用您提到的project.reporting.outputEncoding 的配置)指定 output 编码。这与插件在options 文件中放置的目录名称的编码有什么关系?你真的在你的机器上复制了这个吗?你真的看过我说的这个options 文件吗?你明白这个问题了吗?

标签: java maven maven-javadoc-plugin


【解决方案1】:

正如你所说,这看起来像是用于将文件写入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 编码。

【讨论】:

  • 在我看来这确实是一个错误。知道我们可以在哪里为 Maven Javadoc 插件提交错误吗?
  • 在 Jira here 中有关于他们的问题跟踪器的详细信息。无法发现任何明显的东西。
  • 好的,我已经提交了MJAVADOC-581
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 2014-05-10
  • 2017-09-04
  • 2012-04-09
  • 1970-01-01
相关资源
最近更新 更多