Java文档的编程访问方式

9
有没有一种API可以编程访问Java文档?类似于Eclipse编辑器/IDE的智能感知。当然,可以解析和索引生成的javadoc html,但知道是否已经存在一个独立的包将会很棒。
更新: 明确一点,我正在尝试以编程方式访问java语言实现的文档。然而,并没有简单的方法,但是必须从Oracle的网站获取openjdk,然后执行make docs并提供一些doclet来获得非html格式的输出。这就是我一开始想避免的事情。所以现在我正在阅读所有Makefiles,试图弄清楚为什么$PLATFORM未被解析且源构建失败!
我最终落实的方案: 爬取html文档。是的。意识到这将完成我的工作。
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)")

但看一看dexy。如果我在Ubuntu上能够成功构建OpenJDK,那么就可以生成漂亮的JSON了。


需要特定版本吗?例如Java 7、Java 6?还是您需要能够在之间进行跟踪? - MadProgrammer
虽然不是很容易,但Eclipse可以做到。在这里搜索javadoc解析器。 - Miserable Variable
@MadProgrammer 版本特定并不是非常重要。但我需要实验的代码库是用Java 6编写的。 - Tathagata
是的,我的答案可能是“不”。基本上,就我所知,对于NetBeans来说,处理过程将是解析单个JavaDoc(从索引页面开始),并根据包、类、方法和可能的字段值对结果进行索引。我喜欢这个想法。你可以拉取NetBeans源代码,看看他们是如何做到的:P - MadProgrammer
请注意,JavaScript 可以创建源代码的 HTML 版本并创建链接。解析那些 HTML 文件可能是您实际需要的非常简单的解决方案。 - Thorbjørn Ravn Andersen
显示剩余5条评论
3个回答

2

正如您所写的,Eclipse确实解析javadoc并且做得非常好。似乎是在3.2M4中引入的。您可以从Eclipse源代码中提取功能,向Eclipse社区查询入口可能是一个好的开始。

如果这样不起作用,我猜您的起点将是一个普通的HTML解析器。


1
Javadoc 工具会解析 Java 文件中的信息,并委托给一个 doclet 将这些结构化信息转换为文档。标准的 doclet 会生成熟悉的 HTML 输出,但你也可以 编写自己的 doclet 并告诉 javadoc 使用它。如果你有原始源代码可用,这可能是最强大的选项。

0
  • 你可以使用JavaDoc工具的输出并将其解析为XML,例如在此示例中
  • 您还可以使用其他文档提取工具,如Doxygen,并解析它们更好的XML输出。
  • 当您具备基本的解析器知识时,您可以自己编写JavaDoc提取器。有很多免费的Java解析器是一个很好的起点。(我认为这将是您研究原型的最佳方式)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接