我创建了一些自定义 JavaDoc Taglet,如下所述:
http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/taglet/overview.html
当我手动指定 Taglet 类时,它们可以与 Maven Javadoc 插件一起正常工作:
<taglets>
<taglet>
<tagletClass>package.to.YourFirstTagletClass</tagletClass>
</taglet>
<taglet>
<tagletClass>package.to.YourSecondTagletClass</tagletClass>
</taglet>
...
</taglets>
<tagletArtifact>
<groupId>group-Taglet</groupId>
<artifactId>artifact-Taglet</artifactId>
<version>version-Taglet</version>
</tagletArtifact>
如此处所述:http://maven.apache.org/plugins/maven-javadoc-plugin/examples/taglet-configuration.html
但是,如果我有插件自动检测我的 Taglet,如上述链接末尾所述,即:
<tagletArtifacts>
<tagletArtifact>
<groupId>group-FirstTaglet</groupId>
<artifactId>artifact-FirstTaglet</artifactId>
<version>version-FirstTaglet</version>
</tagletArtifact>
</tagletArtifacts>
然后,在构建时,出现以下错误:
[WARNING] Unable to auto-detect Taglet class names from '/path/to/jar.jar'. Try to specify them with <taglets/>.
有人对检查什么有建议吗?
谢谢!
检查maven-javadoc-plugin源代码的相关部分,有三种不同的异常类型可以产生此警告。在所有情况下,如果您使用 mvn -X
重新运行构建以启用调试模式,您将获得包含更多详细信息的完整异常堆栈跟踪。这是我在 JPMS 模块化项目中使用 maven-javadoc-plugin 3.6.3 时遇到的一个此类异常:
[DEBUG] NoClassDefFoundError: module-info is not a class because access_flag ACC_MODULE is set
java.lang.NoClassDefFoundError: module-info is not a class because access_flag ACC_MODULE is set
at java.lang.ClassLoader.defineClass1 (Native Method)
at java.lang.ClassLoader.defineClass (ClassLoader.java:1022)
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:174)
at java.net.URLClassLoader.defineClass (URLClassLoader.java:555)
at java.net.URLClassLoader$1.run (URLClassLoader.java:458)
at java.net.URLClassLoader$1.run (URLClassLoader.java:452)
at java.security.AccessController.doPrivileged (Native Method)
at java.net.URLClassLoader.findClass (URLClassLoader.java:451)
at java.lang.ClassLoader.loadClass (ClassLoader.java:594)
at java.lang.ClassLoader.loadClass (ClassLoader.java:527)
at org.apache.maven.plugins.javadoc.JavadocUtil.getTagletClassNames (JavadocUtil.java:669)
我通过删除 module-info.java
来解决这个问题——即取消模块化我的 taglet 组件。