2017-07-17 42 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时,这最终奏效了。

相关问题