2011-12-14 7 views
23

Necesito saber cómo leer los comentarios Javadoc en tiempo de ejecución¿Cómo leer los comentarios de Javadoc por reflexión?

Digamos que tiene la siguiente función (probablemente por la reflexión?):

/** 
* function that do some thing 
*/ 
public void myFunc() 
{ 

    //... 
} 

En tiempo de ejecución, puedo obtener mucha información acerca de esta función por reflexión ... Pero no puedo leer los comentarios. Entonces la pregunta es, ¿Cómo leer esto javadoc comentarios en tiempo de ejecución.

+0

Desde las 2 respuestas aquí dice ellos no pueden ser realizadas con el código compilado, debería poder hacer con el código fuente. Y para hacer eso intente buscar "extraer javadoc de la fuente" y luego obtener alguna herramienta de código abierto y modificarla de acuerdo a su necesidad. –

+0

¡Creo que es mucho más fácil ir con @Puce ya que soy el propietario del código fuente! –

+1

La pregunta real es: ¿para qué necesitas esos JavaDocs? ¿Cuál es el caso de uso? – Thomas

Respuesta

14

Considere utilizar anotaciones en lugar de Javadoc y escriba un procesador de anotación.

16

No puede. Se eliminan del código compilado.

7

No puede hacer eso, porque javadoc no está compilado en las clases finales.

30

Doclet clase:

public class ExtractCommentsDoclet { 
    public static boolean start(RootDoc root) throws IOException { 
     for (ClassDoc c : root.classes()) { 
      print(c.qualifiedName(), c.commentText()); 
      for (FieldDoc f : c.fields(false)) { 
       print(f.qualifiedName(), f.commentText()); 
      } 
      for (MethodDoc m : c.methods(false)) { 
       print(m.qualifiedName(), m.commentText()); 
       if (m.commentText() != null && m.commentText().length() > 0) { 
        for (ParamTag p : m.paramTags()) 
         print(m.qualifiedName() + "@" + p.parameterName(), p.parameterComment()); 
        for (Tag t : m.tags("return")) { 
         if (t.text() != null && t.text().length() > 0) 
          print(m.qualifiedName() + "@return", t.text()); 
        } 
       } 
      } 
     } 
     return true; 
    } 

    private static void print(String name, String comment) throws IOException { 
     if (comment != null && comment.length() > 0) { 
      new FileWriter(name + ".txt").append(comment).close(); 
     } 
    } 
} 

y ejecución experta:

<plugin> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <extensions>true</extensions> 
    <executions> 
     <execution> 
      <phase>compile</phase> 
      <goals> 
       <goal>aggregate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <doclet>ExtractCommentsDoclet</doclet> 
     <docletPath>${project.build.directory}/classes</docletPath> 
     <reportOutputDirectory>${project.build.outputDirectory}/META-INF</reportOutputDirectory> 
     <useStandardDocletOptions>false</useStandardDocletOptions> 
    </configuration> 
</plugin> 

Leer documentos de ruta de clases: META-INF/apidocs

+0

bueno, ¿cómo se incluyen las herramientas.jar de jdk en maven? – TecHunter

+0

Heh, ¿quieres leer javadoc en tiempo de ejecución? - ¡No hay problema, capitán! ¡Escribiré una solución para ti! :-) Pero creo que omitió una pregunta al final de su respuesta: ¿Por qué tiene que hacer eso? Es posible martillar las uñas con un microscopio, pero no está diseñado para hacer tales cosas) – 4ndrew

Cuestiones relacionadas