項目到了尾聲,大家都開始頭疼——又要寫文檔了……是的,我們大多數(shù)人都不是從正規(guī)的Programer訓(xùn)練出來的。當(dāng)初學(xué)習(xí)編程序的時候,就從來沒有想過要給自己寫的那幾個程序編寫一份完整的文檔,所有的注釋都僅僅是為了自己當(dāng)時能夠想起這段代碼到底是干什么的,沒有人想過這些代碼的升級、共享問題。但是,開始做商業(yè)軟件之后,一切都變了,尤其是大型的團(tuán)隊開發(fā)項目中。 大家也許注意到了,java的API文檔總是緊緊跟隨著JSDK的版本的提高而保持著最新的狀態(tài)。試想一下,手工維護(hù)這么復(fù)雜的文檔可能嗎?當(dāng)然不可能,這一切都是javadoc這個小程序的功勞(當(dāng)然也有java類庫作者們做程序注釋的一份功勞)。API文檔就是用它根據(jù)最新的源代碼自動生成的,一切都是這么容易——只需要你把本來就要寫的注釋寫得更規(guī)范一些,再稍微詳細(xì)一些。然而,大家似乎好像根本就沒有意識到它的存在,很少有人會用它來為自己的程序生成文檔。不知道,你現(xiàn)在是否對它有了興趣?好吧,下面我們就開始這個令人輕松的自動文檔生成之旅。
【如何插入注釋】
JAVADOC為你生成代碼不是憑空來的,也不是它會自動分析你的代碼——每個人都有自己的代碼風(fēng)格,如果要進(jìn)行分析翻譯恐怕還是機器碼更容易生成百倍。它的分析機制依賴于你按照規(guī)范為你的代碼添加應(yīng)有而足夠的注釋。只有你老老實實寫注釋,才有可能把以前需要做雙份的工作一次做了。 Javadoc工具可以從下列對象中提取出信息: · 包。 · 公共類。 · 公共接口。 · 公共或者受保護(hù)的方法。 · 公共或者受保護(hù)的變量/常數(shù)。 針對每一種特性,你都應(yīng)該提供一條注釋。每一條注釋都要以/**打頭,以*/結(jié)尾。在每條/** …… */文檔注釋可包括任意格式的文字。,它的第一個句子應(yīng)該是一個總結(jié)性的語句,javadoc會自動把它提出來制作總結(jié)頁。當(dāng)然,這里你完全可以使用一些HTML的記號,例如<i>...</i>表示斜體;<tt>...</tt>表示等寬的“打印機”字體;<b>...</b>表示粗體;甚至用<img...>包括一副圖象等等。(但是不要使用類似于<h1>的標(biāo)題格式的標(biāo)記,或者水平分隔線<hr>等,它們會和文檔自己的格式發(fā)生沖突)然后在后面接上一些特殊的“標(biāo)記”。每個標(biāo)記以@開頭,例如@author或者@param等等。 加入在注釋中包含了指向其它文件的其它文件的鏈接的話(例如你的插圖和圖片),需要將那些文件放置在名為doc-files的子目錄中。javadoc會將這些目錄以及其中的文件從源目錄復(fù)制到文檔目錄。下面我們分類解釋一下我們可能會比較常用的一些標(biāo)記。
■常規(guī)注釋 下面這些標(biāo)記可以在所有文檔注釋中使用。 ◇ @since 版本 該標(biāo)記可以生成一個注釋表明這個特性(類、接口、屬性或者方法等)是在軟件的哪個版本之后開始提供的。 ◇ @deprecated 類、屬性、方法名等 這個標(biāo)記可以增加一條注釋,指出相應(yīng)的類、方法或者屬性不再應(yīng)該使用。javadoc僅將首句復(fù)制到概覽部分和索引中。后面得句子還可以解釋為什么不鼓勵使用它。有時候,我們也推薦另外一種解決辦法,例如: @deprecated Use <tt>theAnotherMethod</tt> 或者使用{@link}標(biāo)記給一個推薦的連接關(guān)于它的使用我們將馬上介紹。 ◇ @see 鏈接 這個標(biāo)記在“See also”(參見)小節(jié)增加一個超鏈接。這里的鏈接可以是下面幾項內(nèi)容: · package.class#member label 添加一個指向成員的錨鏈接,空格前面是超鏈接的目標(biāo),后面是顯示的文字。注意分隔類和它的成員的是#而不是點號,你可以省略包名或者連類名也一塊省略,缺省指當(dāng)前的包和類,這樣使注釋更加簡潔,但是#號不能省略。label是可以省略的。 · <a href=...>label</a> 這個不用解釋了吧。 · "Text" 這個直接在“See also”中添加一段沒有鏈接的文字。 ◇ {@link 鏈接目標(biāo) 顯示文字} 其實準(zhǔn)確的說,link的用法和see的用法是一樣,see是把鏈接單列在參見項里,而link是在當(dāng)前的注釋中的任意位置直接嵌入一段帶超級鏈接的文字。
■為類和接口添加注釋 類或者接口的注釋必須在所有import語句的后面,同時又要位于class定義的前面。除了上面所說的常規(guī)標(biāo)記以外,你還可以在類注釋中使用如下標(biāo)記: ◇ @author 作者名 當(dāng)使用author標(biāo)記時,用指定的文本文字在生成的文檔中添加“Author”(作者)項。文檔注釋可以包含多個@author標(biāo)記??梢詫γ總€@author指定一個或者多個名字。當(dāng)然你同樣可以使用多個作者標(biāo)記,但是它們必須放在一塊兒。 ◇ @version 版本 這個標(biāo)記建議一個“版本”條目,后面的文字可以是當(dāng)前版本的任意描述。 下面是類注釋的一個例子: /** * An implementation of a menu bar. You add <code>JMenu</code> objects to the * menu bar to construct a menu. When the user selects a <code>JMenu</code> * object, its associated <code>JPopupMenu</code> is displayed, allowing the * user to select one of the <code>JMenuItems</code> on it. * <p> * For information and examples of using menu bars see * <a href="How‘ target=_blank>http://java./docs/books/tutorial/uiswing/components/menu.html">How to Use Menus</a>, * a section in <em>The Java Tutorial.</em> * For the keyboard keys used by this component in the standard Look and * Feel (L&F) renditions, see the * <a href=doc-files/Key-Index.html#JMenuBar>JMenuBar</a> key assignments. * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is appropriate * for short term storage or RMI between applications running the same * version of Swing. A future release of Swing will provide support for * long term persistence. * * @beaninfo * attribute: isContainer true * description: A container for holding and displaying menus. * * @version 1.85 04/06/00 * @author Georges Saab * @author David Karlton * @author Arnaud Weber * @see JMenu * @see JPopupMenu * @see JMenuItem */
■方法注釋 緊靠在每條方法注釋的前面,必須有一個它所描述的那個方法的簽名。同樣除了使用常規(guī)用途的標(biāo)記以外,還可以使用如下針對方法的注釋: ◇ @param 變量描述 當(dāng)前方法需要的所有參數(shù),都需要用這個標(biāo)記進(jìn)行解釋,并且這些標(biāo)記都應(yīng)該放在一起。具體的描述(說明)可同時跨越多行,并且可以使用html標(biāo)記。 ◇ @return 該方法的返回值 這個標(biāo)記為當(dāng)前方法增加一個返回值(“Returns”)小節(jié)。同樣具體描述支持html并可跨多行。 ◇ @throws 該方法拋出的異常 這個標(biāo)記為當(dāng)前方法在“Throws”小節(jié)添加一個條目,并會自動創(chuàng)建一個超級鏈接。具體的描述可以跨越多行,同樣可以包括html標(biāo)記。一個方法的所有throws都必須放在一起。 下面是一個方法注釋的例子: /** * Returns the model object that handles single selections. * * @param ui the new MenuBarUI L&F object * @return the <code>SingleSelectionModel</code> property * @see SingleSelectionModel * @see JComponent#getUIClassID * @see UIDefaults#getUI */
■包和綜述注釋 前面的都是針對某一個類、方法等的注釋,可以直接放在JAVA源文件中。然而為了生成一個包的注釋,必須在每個包的目錄下放置一個名為package.html的文件來對包進(jìn)行描述。標(biāo)簽<body>....</body>之間的文字都會被javadoc自動提取出來。 也可以為所有源文件提供一個綜述注釋,寫入名為overview.html文件中,將其放在所有源文件所在的父目錄下面。標(biāo)簽<body> .... </body>之間的文字也都會被javadoc自動提取出來,做成文檔的Overview
【如何提取程序文檔】
首先,我們還是依照慣例來看看javadoc的基本用法,你可以通過javadoc -help來獲得它當(dāng)前版本的具體設(shè)定細(xì)節(jié)。 javadoc [options] [packagename] [sourcefiles] [@files] 參數(shù)可以按造任意順序排列。 · options 命令行選項。 · packagenames 一系列包的名字,空格分隔,必須分別制定想要為之建立文檔的每一個包。Javadoc不遞歸作用于每一個包,也不允許使用通配符。 · sourcefiles 一系列源文件名,用空格分隔。源文件名可以包括路徑和通配符如“*”。 · @files 以任意次序包含包名和源文件的一個或者多個文件。當(dāng)在sourcefiles中需要指定的文件太多的時候,就可以使用它來簡化操作。目標(biāo)文件是以空格或者回車來進(jìn)行分隔的源文件名。 其中常用的選項有: -d 路徑 指定javadoc保存生成的HTML文件的目的目錄,缺省為當(dāng)前目錄。 -author 在文檔中包含作者信息(默認(rèn)情況下會被省略) -version 在文檔中包含版本信息(在默認(rèn)情況下會被省略) -header header文本 指定放置在每個輸出文件頂部的頁眉文件。該頁眉文件將放在上部導(dǎo)航欄的右邊,header文本可以包括HTML標(biāo)記和空格,但是如果這樣就必須用引號將它括起。在header中的任何內(nèi)部引號都不許使用轉(zhuǎn)義。 -footer footer文本 指定放置在每個輸出文件底部的腳注文本。腳本將放置在下部導(dǎo)航欄的右邊,其它同header一樣。 -bottom text 指定放置在么個輸出文件底部的文本。該文本將放置在頁底,位于導(dǎo)航欄的下面。其它同header參數(shù)。 -protected 只顯示受保護(hù)的和共有的類及成員,這是缺省狀態(tài)。 -public 只顯示公有的類和成員。 -package 只顯示包、受保護(hù)的和公有的類及成員。 -private 顯示所有的類和成員,如果是內(nèi)部開發(fā)使用的程序文檔,這個將非常有用。 -sourcepath sourcepathlist 當(dāng)將包名傳遞給javadoc的時候,可以指定查找源文件(.java)的搜索路徑。但必須注意,只有當(dāng)用javadoc命令指定包名時才能使用sourcepath選項。如果省略sourcepath,則javadoc使用classpath查找源文件。注意:你需要把sourcepath設(shè)置成目標(biāo)包的源文件所在的目錄,例如:你在從c:jproject里有一個包cn.com.linuxaid,你想為它里面的文件生成文檔,那么你就必須寫成c:jprojectcncomlinuxaid。 -clathpath clathpathlist 指定javadoc查找“引用類”的路徑,“引用類”是值帶文檔的類加上它們引用的任何類。javadoc將搜索指定路徑的所有子目錄。classpathlist可以包含多個路徑,它們用分號分隔。
下面我們來舉一個例子: 假設(shè),我們需要在targetdocdir放置我們生成的文檔,需要對c:jproject里的cn.com.linuxaid包內(nèi)的源文件建立程序文檔。那么我們需要進(jìn)入c:jprojectcncom(也就是包含了overview.html的目錄——假如你提供了它的話)。然后運行 javadoc -d targetdocdir cn.com.linuxaid
除了javadoc提供了豐富的選項參數(shù)來讓你定制你所需要生成的程序文檔以外,還可以借助doclet來產(chǎn)生任何形式的輸出,具體的情況,請仔細(xì)閱讀聯(lián)機幫助文檔。
|
|
|