2012-10-12 2 views
9

Esiste una API per l'accesso a livello di programmazione allo Java documentation? Qualcosa di simile a ciò che gli editor/IDE come Eclipse fanno per IntelliSense. Sicuramente, l'html generato da javadoc può essere analizzato e indicizzato, ma sarebbe bello sapere se qualcosa esiste già come pacchetto standalone.Accesso programmatico alla documentazione Java

Aggiornamento: Per essere chiari, sto cercando di ottenere un accesso programmatico alla documentazione per l'implementazione del linguaggio Java. Tuttavia, non esiste una facile via d'uscita, ma è necessario ottenere openjdk dal sito Oracle e quindi fare make docs e fornire alcuni doclet per ottenere l'output in formato non-html. Questo è quello che stavo cercando di evitare sin dall'inizio. Quindi sto leggendo tutti i Makefile ora cercando di capire perché $ PLATFORM non viene risolto e la compilazione della fonte non funziona!

Quello che ho finalmente risolto con:

raschio documenti HTML. Sì. Mi sono reso conto che avrei finito il mio lavoro.

import urllib2 
import pymongo 

mongo = pymongo.Connection('localhost') 
mongo_db = mongo['api_db'] 
mongo_collection = mongo_db['api_collection'] 

URL='''http://docs.oracle.com/javase/6/docs/api/index-files/index-''' 
URL_range = 27+1 

def getPageElements(url): 
    content=urllib2.urlopen(url).read() 
    from BeautifulSoup import BeautifulSoup 
    soup = BeautifulSoup(content) 
    elements = soup('dl') 
    return elements 


def savePageElements(elements): 
    for i in elements[0]: 
      try: 
        entry={'type_description':str(i.findNext('dt')).split('-')[1].split('<')[0]\ 
            +i.findNext('a').findNext('a').renderContents(),\ 
            'signature':i.findNext('a').findNext('a').renderContents()+i.findNext('b').renderContents(),\ 
            'description': i.findNext('dd').renderContents()\ 
          } 
        print entry 
        insert_id = mongo_collection.save(entry) 
      except: 
        pass 


def retrieve(str): 
    mongo_documents = mongo_collection.find({ 
    'signature': str, 
    #'type_description':"Method of java.io.PrintStream" 
    }) 
    for this_document in mongo_documents: 
     print this_document 


if __name__=="__main__": 
    for i in range(1,URL_range): 
      #url=URL+str(i)+".html" 
      #print "Processing:", url 
      #elements=getPageElements(url) 
      #print elements[0] 
      #savePageElements(elements) 
      retrieve("println(String)") 

Ma dare un'occhiata a dexy. Se potessi essere riuscito a compilare OpenJDK su Ubuntu senza problemi - avrebbe generato un buon JSON con cui giocare.

+0

Per quale scopo? – MadProgrammer

+0

Per costruire un prototipo di ricerca per "posizione delle caratteristiche" e "tracciabilità" tra codice e documentazione. – Tathagata

+0

Avrebbe bisogno di una versione specifica? cioè Java 7, Java 6? O dovresti essere in grado di tracciare tra – MadProgrammer

risposta

2

Come si scrive Eclipse analizza javadoc e fa un buon lavoro. Sembra che sia stato introdotto in 3.2M4. Potrebbe essere possibile estrarre la funzionalità dai sorgenti di Eclipse, verificando con la comunità di Eclipse che il punto di ingresso potrebbe essere un buon punto di partenza.

Se ciò non funziona, immagino che il tuo punto di partenza sarebbe un semplice parser HTML vanilla.

0
  • È possibile utilizzare l'output dello strumento JavaDoc e analizzarlo come XML come in this example.
  • È inoltre possibile utilizzare altri strumenti di estrazione della documentazione come Doxygen e analizzare il loro (migliore) output XML.
  • Quando si dispone della conoscenza di base del parser, è possibile scrivere un estrattore JavaDoc autonomamente. Ci sono molti parser Java gratuiti che sono un buon punto di partenza. (Penso che questo sia il modo migliore per il tuo prototipo di ricerca).
1

Lo strumento javadoc analizza le informazioni dai vostri file Java e delegati ad un doclet di tradurre queste informazioni strutturate nella documentazione. Il doclet standard produce l'output HTML familiare ma è possibile specificare write your own e indicare a javadoc di utilizzarlo. Questa è probabilmente l'opzione più valida se si dispone del codice sorgente originale disponibile.