一直想学习下hibernate的源码,但是一直杂事不断,总是忘记,今天忽然想起来,拖了好几个月了,于是把hibernate的src目录下的内容导入eclipse的新项目中,准备空了学习下。
导入源码,配置好build path,却发现还有好多错误,竟然是org.hibernate.hql.antlr包里没有类,只有一个package.html文件,打开,里面写着:
[color=blue]NOTE: The classes in this package are generated from the ANTLR grammar files,
do not register them into version control.[/color]
大略意思是这个包的类是由ANTLR语法文件产生的,不包含在版本控制中。
疑惑,ANTLR语法是什么,不包含在这里又放在哪里了?
于是查看hibernate的其他目录,看到了一个\grammar目录,其中有三个.g文件,用editplus打开,是包含header,options,tokens...之类的结构,有点像一个文法定义的形式,看到里面定义的类,就是缺失的类,那么,应该是由这个目录产生源码了,那怎么产生呢?
又翻了翻,最外面有几个build.*的文件,build.bat,build.sh,build.xml,.bat是在windows下的,.sh是linux下的,都打开看了看:java -cp "lib/ant-launcher-1.6.5.jar" ...,看不明白,再打开build.xml,好长,看看里面有没有grammar,于是搜索关键字'grammar',竟然真有,那或许就是从这里产生吧,那么就执行下build.bat试一下。
执行完build.bat,在 该目录下产生了一个build子目录,打开,是gensrc子目录,一级级打开,最里面就是缺失的包,太好了,拷到对应的目录下,刷新,eclipse不包错了,ok
然而,还不知道什么是antlr,google了一下,找到一个定义:
[color=blue]ANTLR(ANother Tool for Language Recognition)[/color]它是这样的一种工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。作为翻译程序的一部分,你可以使用简单的操作符和动作来参数化你的文法,使之告诉ANTLR怎样去创建抽象语法树(AST)和怎样产生输出。ANTLR知道怎样去生成识别程序,语言包括Java,C++,C#.
导入源码,配置好build path,却发现还有好多错误,竟然是org.hibernate.hql.antlr包里没有类,只有一个package.html文件,打开,里面写着:
[color=blue]NOTE: The classes in this package are generated from the ANTLR grammar files,
do not register them into version control.[/color]
大略意思是这个包的类是由ANTLR语法文件产生的,不包含在版本控制中。
疑惑,ANTLR语法是什么,不包含在这里又放在哪里了?
于是查看hibernate的其他目录,看到了一个\grammar目录,其中有三个.g文件,用editplus打开,是包含header,options,tokens...之类的结构,有点像一个文法定义的形式,看到里面定义的类,就是缺失的类,那么,应该是由这个目录产生源码了,那怎么产生呢?
又翻了翻,最外面有几个build.*的文件,build.bat,build.sh,build.xml,.bat是在windows下的,.sh是linux下的,都打开看了看:java -cp "lib/ant-launcher-1.6.5.jar" ...,看不明白,再打开build.xml,好长,看看里面有没有grammar,于是搜索关键字'grammar',竟然真有,那或许就是从这里产生吧,那么就执行下build.bat试一下。
执行完build.bat,在 该目录下产生了一个build子目录,打开,是gensrc子目录,一级级打开,最里面就是缺失的包,太好了,拷到对应的目录下,刷新,eclipse不包错了,ok
然而,还不知道什么是antlr,google了一下,找到一个定义:
[color=blue]ANTLR(ANother Tool for Language Recognition)[/color]它是这样的一种工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。作为翻译程序的一部分,你可以使用简单的操作符和动作来参数化你的文法,使之告诉ANTLR怎样去创建抽象语法树(AST)和怎样产生输出。ANTLR知道怎样去生成识别程序,语言包括Java,C++,C#.