Dong Diem Thuy's Blog

Sử dụng Javadoc với Maven để tạo tài liệu dự án

Javadoc là công cụ mạnh mẽ, dùng để sinh tài liệu API từ mã nguồn Java. Javadoc được đóng gói và phân phối trong bộ JDK, rất thuận tiện để lập trình viên tạo tài liệu API nhanh chóng cho dự án của mình. Javadoc không chỉ được các công cụ IDE như Eclipse, Netbeans gọi trực tiếp từ giao diện mà còn có thể tích hợp sử dụng với Maven – là công cụ quản lý và build dự án Java phổ biến nhất hiện này. Bài viết này giới thiệu về cú pháp Javadoc và cách thức sử dụng Javadoc với Maven dễ dàng thông qua plugin.

Giới thiệu về Javadoc

Javadoc là gì?

Javadocbộ công cụ sinh tài liệu nằm trong bộ công cụ phát triển Java (JDK) của Oracle để tạo ra tài liệu theo định dạng HTML từ mã nguồn Java. Định dạng HTML tạo thuận lợi để từ một tài liệu có thể tham chiếu đến các tài liệu khác có liên quan. Javadoc được dùng để tạo ra tài liệu tham khảo hỗ trợ cho các lập trình viên.

Hình 1. Cách javadoc làm việc

Một số môi trường phát triển tích hợp (Intergrated Development Enviroment - IDE) như Netbeans, Eclipse tự động tạo ra Javadoc ở định dạng HTML.

Để tạo ra công cụ Javadoc, các nhà phát triển (trước đây là SUN) đã định nghĩa Doclet API là cấu trúc interface, class mà chương trình chuyển đổi tài liệu cần cài đặt. Chương trình chuyển đổi tài liệu được gọi là Doclet, là một chương trình viết bằng ngôn ngữ Java cài đặt Doclet API để xác định nội dung từ phần chú thích tài liệu trong mã nguồn Java và định dạng các nội dung này thành tài liệu HTML. Mặc định, công cụ Javadoc cung cấp một chương trình chuyển đổi tài liệu cài sẵn - gọi là Doclet tiêu chuẩn - để tạo tài liệu API theo định dạng HTML. Tuy nhiên bạn có thể tạo Doclet của riêng mình để tùy chỉnh các tài liệu sinh ra bởi Javadoc theo định dạng như mong muốn.

Cú pháp Javadoc

Một chú thích tài liệu Javadoc được đặt trong cặp dấu /** ...*/.

Chú thích tài liệu Javadoc nằm trước khai báo một lớp đối tượng hoặc phương thức. Bên trong một chú thích tài liệu bao gồm hai phần, phần thứ nhất mô tả bằng lời về chức năng của lớp đối tượng, phương thức; phần thứ hai là các thẻ @param, @return, @see,...

Ví dụ:

/**
 * Returns an Image object that can then be painted on the screen.  
 *   The url argument must specify an absolute {@link URL}. The name 
 *   argument is a specifier that is relative to the url argument.  
 *   <p>  
 *   This method always returns immediately, whether or not the  
 *   image exists. When this applet attempts to draw the image on  
 *   the screen, the data will be loaded. The graphics primitives  
 *   that draw the image will incrementally paint on the screen. 
 *
 *   @param   url  an absolute URL giving the base location of the image  
 *   @param   name the location of the image, relative to the url argument  
 *
 *   @return  the image at the specified URL
 *
 *   @see     Image 
 */
 
 public Image getImage(URL url, String name) {
        try {
            return getImage(new URL(url, name));
        } 
        catch (MalformedURLException e) {
            return null;
        }
}

Kết quả chạy Javadoc được hiển thị dưới đây:

Hình 2. Ví dụ kết quả trả về của đoạn cú pháp Javadoc

Với các mô tả cho class, phương thức thì nên mô tả ngắn gọn ý nghĩa, mục đích của từng class, phương thức; lưu ý chỉ thực sự thêm một liên kết {@link} đến một mục API khác khi người dùng muốn click vào đó để biết thêm thông tin.

Với các Tag Comments, bao gồm các thẻ theo thứ tự sau:

  • @author: xác định tác giả thực hiện các classes và interfaces.
  • @version: có dạng %I%, %G%, với %I% được tăng lên khi chỉnh sửa tập tin, mặc định khi tạo là 1.1 sau khi chỉnh sửa thì tăng lên 1.2, %G% với định dạng mm/dd/yy, dùng khi chú thích cho các classes và interfaces.

  • @param: mô tả các tham số, dùng khi chú thích cho các methods và constructors.

  • @return: mô tả dữ liệu hay giá trị trả về, dùng khi chú thích cho methods.

  • @exception (@throws): khai báo các ngoại lệ mà phương thức có thể ném ra.

  • @see: khai báo liên kết đến tài liệu khác để xem thêm.

  • @since: cho biết lớp đối tượng/phương thức bắt đầu từ phiên bản nào.

  • @serial (@serialField hoặc @serialData).

  • @deprecated: thông báo class hoặc phương thức đã lỗi thời và hướng dẫn cách dùng khác để thay thế.

Biên dịch Javadoc

Sau khi thực hiện viết javadoc trong các class của 1 project thì bạn có thể biên dịch javadoc để xem kết quả trả về là các trang html.

Ví dụ sau đây minh họa cho các bước thực hiện viết javadoc với Netbeans 7.4.

Project JavaDocUsage được thiết kế có 2 class là Person và Car nằm trong package javadocusage.beans.

Hình 3. Javadoc cho class Car

Hình 4. Javadoc cho class Person

Khi viết xong Javadoc, để biên dịch Javadoc thành các trang html, bạn chọn Project đang thực hiện, click chuột phải -> Generate Javadoc như hình dưới.

Hình 5. Cách biên dịch Javadoc

Kết quả sau khi biên dịch, tài liệu API do Javadoc sinh ra được lưu trong thư mục project của bạn.

Hình 6. Thư mục chứa Javadoc

Bạn có thể sử dụng command line để chạy Javadoc để tạo ra tài liệu API tương tự như trên:

javadoc -version -author -d ^
D:\NetBeansProjects\JavaDocUsage\src\javadocusage\beans *.java

Hình 7. Chạy Command Line

Kết quả sau khi tạo ra Javadoc:

Hình 8. Kết quả

Sử dụng Javadoc với Maven

Các bước thực hiện viết Javadoc trong các class tương tự như trên. Ở đây chỉ hướng dẫn cách biên dịch Javadoc với Maven.

Đầu tiên bạn tải Maven về máy và thiết lập môi trường để chạy Maven.

Sau đó bạn tạo một project Maven trong Netbeans rồi thực hiện việc tạo tài liệu Javadoc cho project Maven.

Ví dụ minh họa

Sử dụng lại ví dụ ở trên, tạo project Maven với tên gọi example-javadoc-with-maven. Sau khi thực hiện biên dịch chú thích tài liệu Javadoc cho hai class Car và Person ta thực hiện các bước sau:

  • Tại thư mục Project Files: chọn file pom.xml để khai báo Maven plugins.

Hình 9. Khai báo maven plugins

  • Sau đó, nhấn chuột phải vào project chọn Custom -> Goals.

Hình 10. Khai báo maven plugins

  • Tại đây, bạn điền plugin của javadoc vào và nhấn OK.

Hình 11. Plugins của javadoc

Maven Javadoc Plugin có 14 goals nhưng ta chỉ sử dụng một số goals phổ biến như sau:

  • javadoc:javadoc

  • javadoc:test-javadoc

  • javadoc:jar

  • javadoc:test-jar

Sau khi click vào Ok, Maven Javadoc Plugin sẽ thực hiện biên dịch và tạo tài liệu API. Nếu không gặp lỗi gì, quá trình biên dịch kết thúc với thông báo “BUILD SUCCESS”.

Khai báo maven plugins

Khai báo maven plugins được quy định nằm trong file pom.xml của project.

<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.1</version>
</dependency>

Kết quả chạy ví dụ

Sau khi biên dịch, Maven Javadoc Plugin sẽ chạy và sinh ra tài liệu API lưu trong thư mục target/site/apidocs bên trong thư mục gốc project của bạn:

Hình 10. Kết quả chạy chương trình

Kết luận

Bài viết giới thiệu về cách thức sử dụng Javadoc để tạo các tài liệu chú thích cho dự án của mình đặc biệt là dự án sử dụng Maven. Đây là công cụ cần thiết đối với những dự án lớn để người lập trình có thể tạo và chia sẻ tài liệu API cho nhau. Các bạn có thể tải mã nguồn của ví dụ dùng Javadoc với Maven để chạy thử.