我已經開發了一個自定義的javadoc小標籤,它通過API使用反射來獲取有關該小標籤被引用的類的信息。它加載類爲「Class.forName(String)
」。與maven-javadoc-plugin,如何加載包含小程序引用的類?
我能得到這個項目的Taglet的自身努力,甚至使用「ToolProvider.getSystemDocumentationTool()
」和驗證得到的內容運行的集成測試點。
我現在已經在我們的nexus服務器上安裝了這個工件,並且我試圖從一個用Maven和maven-javadoc-plugin
構建的類中引用它。
當我第一次運行我的標記在「Foo.java」中引用的構建版本時,我在我的小代碼中看到了一個ClassNotFound異常,說它找不到指定的類。
這告訴我它已經進入我的小代碼,但它無法加載有問題的類的類文件。這很有諷刺意味,因爲它能夠到達的唯一方法是找到並解析與該類關聯的源文件。
所以,我編輯了maven-javadoc-plugin配置,添加了一個「additionalDependencies
」塊,指定了包含引用標籤的類文件的工件。我還設置了「verbose
」標誌,並且在結果輸出中看到,當它打印出「search path for class files
」時,我在該列表的末尾找到了具有相關類的工件罐。
但是,我仍然收到錯誤。
還有什麼可能會出錯?
下面是相關的代碼的一些摘錄:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
<verbose>true</verbose>
<additionalDependencies>
<additionalDependency>
<groupId>our.group.id</groupId>
<artifactId>our.artifact.id</artifactId>
<version>${current.pom.version}</version>
</additionalDependency>
</additionalDependencies>
<additionalparam>-Xdoclint:none</additionalparam>
<taglets>
<taglet>
<tagletClass>packagepath.taglet.ValidationConstraintsTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>packagepath.taglet.ValidationConstraintsCombinedTaglet</tagletClass>
</taglet>
</taglets>
<tagletArtifact>
<groupId>our.group.id.taglets</groupId>
<artifactId>validationJavadocTaglet</artifactId>
<version>0.0.1-SNAPSHOT</version>
</tagletArtifact>
</configuration>
<executions>
<execution>
<id>module-javadoc-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<show>protected</show>
<detectLinks>false</detectLinks>
</configuration>
</execution>
</executions>
</plugin>
下面是顯示了包含類的加載在Taglet的類的部分代碼:
@Override
public String toString(Tag tag) {
String className = tag.holder().toString();
StringBuilder sb = new StringBuilder();
sb.append("<dt><b>Validation Constraints</b></dt>");
sb.append("<dd>");
sb.append("<table border=1><thead><tr><th>Property</th><th>Message</th></tr></thead>");
sb.append("<tbody>");
try {
Class<?> clazz = Class.forName(className);
當我運行生成的,我看到這個輸出:
Generating C:\...\...\target\apidocs\help-doc.html...
[done in 2593 ms]
[WARNING] Javadoc Warnings
[WARNING] java.lang.ClassNotFoundException: ...Foo
[WARNING] at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[WARNING] at java.lang.Class.forName0(Native Method)
[WARNING] at java.lang.Class.forName(Class.java:264)
[WARNING] at ....taglet.ValidationConstraintsTaglet.toString(ValidationConstraintsTaglet.java:69)
而且我注意到輸出中的以下行(詳細是on):
[search path for class files: C:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar,...,C:\...\our.artifact.id\target\our.artifact.id-2.7.0-SNAPSHOT.jar]
我檢查了列表末尾的jar並確認有問題的類在那裏。