2017-07-17 43 views
0

我已經開發了一個自定義的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並確認有問題的類在那裏。

回答

0

我確定添加一個「additionalDependency」似乎什麼也不做,我可以看到。

重要的是,我沒有想到的是將依賴添加爲另一個「tagletArtifact」。我想如果你仔細想一想,它就是這個小標籤所需要的依賴。當我爲POM自己生產的工件添加GAV時,這最終奏效了。

相關問題