[컴][자바] Doclet 사용해 보기



Doclet

ref. 1을 보면 Docket 을 이용해서 무엇을 할 수 있는지 알 수 있다.
Doclet은 소스레벨의 구조를 관찰(inspect)하기 위해 제공하는 library이다. 이녀석을 이용하면 다음의 것들을 할 수 있다.
  • 소스의 문서화
  • 프로그램 점검(checking)
  • 자동 코드 생성

왜 Doclet 을 제공하는가?

좀 일반적(?)으로 이야기하면 원래 이런 것을 제공하지 않아도 file 을 읽어드려서 string 을 parsing해서 구조를 파악할 수도 있다. 하지만 이런 것을 위해서는 다시 java language에 대한 parser 를 만들어야 한다. 이런 번거로움을 덜어주기 위한 것이라 보면 될 듯 하다.



Doclet 사용법

Doclet 을 사용하는 방법은 ref. 2에 나와 있다. 대략적으로 설명을 하면, library 를 만드는 과정과 비슷하다.

Doclet class 작성

일단 Doclet 은 javadoc 에서 사용할 수 있도록 interface 를 맞춰야 하는데, 그것이 static type 의 start() 라는 method 이다. 아래는 ref. 2의 소스를 가져왔다.

public class ListClass {
    public static boolean start(RootDoc root) {
        ClassDoc[] classes = root.classes();
        for (int i = 0; i < classes.length; ++i) {
            System.out.println(classes[i]);
        }
        return true;
    }
}

위의 코드는 보면 알겠지만 간단하다. class 들의 이름을 그냥 찍어주는 Doclet 이다.

이 Doclet 을 사용하기 위해서는 당연히 compile 을 해야 한다. compile 을 할 때 Doclet API 를 사용하기 위해서 classpath 에 tools.jar 을 추가해야 한다.
f:\> javac -classpath C:\jdk1.3\lib\tools.jar ListClass.java 

이제 ListClass.class 파일이 만들어 졌다. 이 녀석을 이제 javadoc 와 함께 이용하면 된다.


javadoc 에서 doclet 사용하기

기본적으로 javadoc 은 standard doclet 을 사용한다. 기본적으로 javadoc 에 doclet 을 따로 정의해 주지 않으면 standard doclet 이 사용되는 것이라 보면 된다.

여기서는 우리가 위에서 만든 ListClass 라는 Doclet 을 이용해 보도록 하자. 일단 dd 라는 폴더에 ListClass.class 가 있는 상황이라면 아래처럼 javadoc 를 실행하면 된다.

f:\ --+-- Test.java
       |
      +--- dd -----  ListClass.class

f:\> "c:\Program Files\Java\jdk1.7.0_25\bin\javadoc.exe"  -doclet ListClass -docletpath .\dd Test.java

그러면 아래 처럼 결과가 나온다.

f:\>"c:\Program Files\Java\jdk1.7.0_25\bin\javadoc.exe"  -doclet ListClass -docletpath .\dd Test.java
Loading source file Test.java...
Constructing Javadoc information...
Test



Doclet 예제 gradle project

이런 식으로 작업하는 것은 간단해 보이긴 한데, 좀 더 복잡한 Doclet 을 만들려 할 때 debugging 이 쉽지 않다. 역시 debugger 를 위해서 IDE 에서 작업할 수 있는 것이 좋다.

그래서 github에 작업을 해놨다. gradle 로 되어 있다.

주의할 점은 반드시 build 후에 application 을 실행해야 한다는 것이다. build task 로 ListClass 를 build 해야 하고, 실행을 통해 javadoc 를 실행하기 때문이다. 자세한 것은 소스를 참고하도록 하자.





Reference

  1. https://docs.oracle.com/javase/8/docs/jdk/api/javadoc/doclet/index.html
  2. Doclet Overview, java documentation

댓글 없음:

댓글 쓰기