2011-04-25 33 views
2

我從來沒有運行javadoc自己(無論是在命令行還是ant's javadoc task;我將使用ant) - 我需要爲我編寫的庫生成一個javadoc。javadoc子集/ java庫組織

問題是,我的java庫被組織成幾個包,並沒有辦法在Java中使類在庫中公開,但不公開給外部世界,所以我有一堆從public實現的立場,但不是從圖書館的角度來看的語義立場。

所以我需要弄清楚兩件事。

  1. (短期解決方案)是否有類/接口/方法的一個特定子集,它是旨在由消費者我的媒體庫的製備中使用的Javadoc的一種方式?

  2. 我該如何重組圖書館以確保公共手段是公開的?

回答

3

如果你可以從內部人士公衆公開分離通過包(即有一些包含您的庫的用戶所需的所有公共類,並沒有其他公共類),然後只在這些包上運行Javadoc。

Javadoc通過提供要使用的軟件包列表(以及用於查找這些軟件包的源代碼路徑),並僅爲這些軟件包生成文檔。

使用Ant它有點複雜,因爲使用javadoc任務的最簡單方法是使用<packageset>默認採用給定目錄中的所有包。

這裏只有一個包的示例:

<target name="javadoc"> 
    <javadoc destdir="${javadoc}" 
     encoding="US-ASCII" 
     charset="UTF-8" 
     docencoding="UTF-8" 
     use="yes" 
     windowtitle="JSch API" 
      sourcepath="${src}" 
     > 
     <arg value="-notimestamp" /> 
     <package name="com.jcraft.jsch" /> 
     <doctitle>JSch – Java Secure Channel ${version}</doctitle> 
     <bottom>This is an inofficial Javadoc created by Paŭlo Ebermann. 
    Have a look at the &lt;a href="http://www.jcraft.com/jsch/">official homepage&lt;/a>. 
     </bottom> 
     <link href="http://download.oracle.com/javase/6/docs/api/" /> 
    </javadoc> 
    </target> 

你可以view the result,但它其實不是一個很好的例子,作爲主包這裏包含了大量的類這是爲消費者使用。


如果你是像JSch的情況,即你不能從內部人士公衆公開的包,因爲你有一個包含公共和私有類型的封裝分開,還有一種方法來做到這一點。 Javadoc還支持不提供包名,而是提供單個文件名作爲參數。正如我剛剛花了一些時間來弄清楚如何與螞蟻,這裏所產生的Ant目標代碼做到這一點:

<target name="simple.javadoc"> 
    <javadoc destdir="${simple.javadoc}" 
      encoding="US-ASCII" 
      charset="UTF-8" 
      docencoding="UTF-8" 
      use="yes" 
      windowtitle="simple JSch API" 
      excludepackagenames="*" 
      sourcepath="${src}" 
      > 
     <arg value="-notimestamp" /> 
     <sourcefiles> 
     <resourcelist encoding="US-ASCII"> 
      <file file="simpleclasses.list" /> 
     </resourcelist> 
     </sourcefiles> 
     <doctitle>JSch – Java Secure Channel ${version} (simplified version)</doctitle> 
     <bottom>This is a simplified version of the &lt;a href="http://epaul.github.com/jsch-documentation/javadoc/">inofficial Javadoc&lt;/a> created by Paŭlo Ebermann. 
     Have a look at the &lt;a href="http://www.jcraft.com/jsch/">official homepage&lt;/a>. 
     </bottom> 
     <link href="http://download.oracle.com/javase/6/docs/api/" /> 
    </javadoc> 
    </target> 

文件在simpleclasses.list這裏列出的來源,使用resourcelist。我認爲一個簡單的文件集includesfile=...也可以工作(並且它也可以允許模式而不是簡單的列表)。

重要的一點我必須搜尋相當長的一段:如果你給一個sourcepath屬性,並且不給任何packagenames屬性或<package>子元素,螞蟻會自動提供一個「全包」默認情況下,除了提到的文件,導致不排除任何東西。 (我們希望這裏的sourcepath允許從未記錄的類繼承文檔。)因此,我們還必須提供excludepackagenames="*",因此現在只有<sourcefiles>元素定義了要記錄的內容。

The result looks now much nicer,謝謝你的提問。

+0

感謝您的幫助! ''給我一個關於嵌套資源的錯誤,但是如果我使用''作爲資源集合,我可以讓它工作正常。 – 2011-05-06 14:17:57

0

首先,有一種簡單的方法可以使用OSGi在隱藏內部時使外部接口可用。至少,這是#2的答案。

你總是可以打破項目分解成多個源代碼樹也一樣,如果你想在一個子集運行的javadoc ...