maven-javadoc-plugin error javadoc: ошибка - невозможно прочитать Длина ввода = 1 с не-ASCII символами в имени каталога - PullRequest
0 голосов
/ 23 ноября 2018

Я использую OpenJDK 11 в Windows 10. У меня очень простое POM для одного файла Java, который генерирует Javadocs.Вот выдержка:

<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.bat, optionsи packages.Файл options является наиболее интересным.Он явно говорит 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 голосов
/ 29 ноября 2018

Как вы говорите, это похоже на кодировку, используемую для записи файлов в target/apidocs.

Просматривая исходный код для maven-javadoc-plugin, он просто использует кодировку платформы при записи этихфайлы - например, эта строка .

Непосредственная настройка кодировки при вызове Maven исправила приведенный выше пример для меня:

mvn clean package -Dfile.encoding=UTF-8

Это больше похоже на обходной путь, чем на хорошийисправить это - нужно предположить, что ничего другого не зависит от кодировки платформы в сборке Maven.

Я думаю, что причина заключается в изменении основного JDK между 8 и 9. Бит кода (фактически в javac), который анализирует файлы аргументов (например, @options в командной строке javadoc), переключился сиспользуя кодировку платформы здесь для вызова Files.newBufferedReader() здесь . Files.newBufferedReader (Path) утверждает, что использует UTF-8, если кодировка не указана.Это означает, что файлы аргументов, как в javac, так и в javadoc, теперь должны быть закодированы в UTF-8.

...