Gar*_*son 6 java maven maven-javadoc-plugin
我在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>
Run Code Online (Sandbox Code Playgroud)
奇怪的是刚刚运行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
Run Code Online (Sandbox Code Playgroud)
在target/apidocs
只有三个文件:javadoc.bat
,options
,和packages
.该options
文件是最有趣的.它明确地说UTF-8
到处都是,应该如此.但看看这些线:
-sourcepath
C:/projects/li??o 1/src/main/java
Run Code Online (Sandbox Code Playgroud)
这个项目是在C:\projects\lição 1
.似乎链Java或Maven或Javadoc插件的某个地方没有正确地将目录名转换为UTF-8.
果然; 当我在Windows中重命名目录以删除非ASCII字符时,mvn clean package
工作得很好.
这似乎是一个明显的错误; 一旦Maven开始,一切都应该是UTF-8.这是Javadoc插件的问题吗?任何人都知道这起源于何处?我应该在哪里提交错误机票?或者我做错了什么?
正如您所说,这看起来像是用于将文件写入target/apidocs
.
查看 maven-javadoc-plugin 的源代码,它只是在编写这些文件时使用平台编码 - 例如这一行。
调用 Maven 时直接设置编码为我修复了上面的示例:
mvn clean package -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
不过,这感觉更像是一种解决方法,而不是一个好的修复方案 - 它需要假设没有任何其他内容取决于 Maven 构建中的平台编码。
我认为原因是主JDK在8和9之间发生了变化。解析参数文件(例如@options
在javadoc命令行中)的代码位(实际上在javac下)已从使用平台编码here切换为调用Files.newBufferedReader()
here。 Files.newBufferedReader(Path)声明如果未指定编码,则使用 UTF-8。这意味着 javac 和 javadoc 中的参数文件现在必须以 UTF-8 进行编码。