2012-10-12 14 views
9

Czy istnieje api do programowego dostępu do Java documentation? Coś podobnego do edytorów/IDE, takich jak Eclipse dla IntelliSense. Z pewnością generowany przez javadoc html może być analizowany i indeksowany, ale byłoby świetnie wiedzieć, czy coś już istnieje jako samodzielny pakiet.Programowy dostęp do dokumentacji Java

Aktualizacja: Aby było jasne, próbuję uzyskać programowy dostęp do dokumentacji do implementacji języka Java. Jednak nie ma łatwego wyjścia, ale musisz pobrać openjdk ze strony Oracle, a następnie wykonać make docs i dostarczyć trochę docletu, aby uzyskać wyjście w formie innej niż html. Tego starałem się uniknąć od samego początku. Czytam teraz wszystkie pliki Makefile, próbując dowiedzieć się, dlaczego $ PLATFORM nie jest rozwiązywana, a kompilacja źródeł nie działa!

Co ja w końcu osiadł w:

skrobanie docs html. Tak. Uświadomiłem sobie, że dostanę swoją robotę.

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)") 

Ale przyjrzeć dexy. Gdybym udało mi się zbudować OpenJDK na Ubuntu bez problemu - wygenerowałbym ładny JSON do zabawy.

+0

W jakim celu? – MadProgrammer

+0

Aby zbudować prototyp badań dla "lokalizacji funkcji" i "śledzenia" między kodem a dokumentacją. – Tathagata

+0

Czy będzie to wymagane w przypadku wersji? tj. Java 7, Java 6? A może potrzebujesz mieć możliwość śledzenia pomiędzy – MadProgrammer

Odpowiedz

2

Podczas pisania Eclipse parsuje javadoc i wykonuje całkiem niezłą robotę. Wygląda na to, że został wprowadzony w 3.2M4. Możesz być w stanie wyodrębnić funkcje ze źródeł Eclipse, sprawdzanie w społeczności Eclipse dla punktu wejścia może być dobrym miejscem do rozpoczęcia.

Jeśli to nie zadziała, domyślam się, że twoim początkiem byłby zwykły vanilla HTML parser.

0
  • Możesz użyć wyjścia narzędzia JavaDoc i przeanalizować je jako XML jako in this example.
  • Można również użyć innych narzędzi do wyodrębniania dokumentacji, takich jak Doxygen i przeanalizować ich (lepsze) wyniki XML.
  • Gdy masz podstawową wiedzę o parserze, możesz samodzielnie napisać ekstraktor JavaDoc. Istnieje wiele darmowych analizatorów Java, które są dobrym punktem wyjścia. (Myślę, że będzie to najlepszy sposób na twój prototyp badań).
1

Narzędzie javadoc przetwarza informacje z twoich plików Java i delegatów do doclet do przetłumaczenia tego zorganizowanego informacji w dokumentacji. Standardowy doclet generuje znane wyjście HTML, ale możesz write your own i nakazać javadoc, aby użył tego. Jest to prawdopodobnie najbardziej niezawodna opcja, jeśli masz dostępny oryginalny kod źródłowy.

Powiązane problemy