分类: Java
2011-10-15 17:17:29
Project、lib、documentation,project是源码,lib是编译后生成的jar包,documentation是生成的doc文件。要编译项目,首先查看project文件夹下的readme文件。这才知道原来hibernate是使用gradle来编译的。
一.Gradle的安装:
这里简单介绍下gradle,gradle用来编译java代码,它包含编译工具ant,自动管理jar包的依赖关系,支持已有的maven和Ivy仓库。使用动态语言groovy作为其核心。下载gradle的包,gradle-1.0-milestone-3-all.zip,解压后,gradle-1.0-milestone-3\docs下存放了gradle的文档。在机器path的环境变量中增加gradle下bin目录,如:E:\学习资料\gradle\gradle-1.0-milestone-3\bin,如果配置成功,则应该可以在dos的终端中键入gradle后,获得一些显示。
二.使用gradle进行编译
1. 安装完成后,进入hibernate源码路径project下执行编译命令gradle build,执行后报错:
应该是缺少依赖库gradle-upload-auth-plugin的1.0.2-snapshot版本,而且报错也告诉我们,这个库已经在上面的几个网址查找过,没找到。需要两个文件,一个jar,一个pom文件。
Jar包通过google,在下面的网址找到了这个jar的下载
pom通过google,在下面的网址找到:
根据上面的报错,知道这个文件应该是首先从本地文件夹下寻找的,路径为file:/C:/Users/caijie/.m2/repository/org/hibernate/build/gradle/gradle-upload-auth-plugin/1.0.2-SNAPSHOT/gradle-upload-auth-plugin-1.0.2-SNAPSHOT.pom
file:/C:/Users/caijie/.m2/repository/org/hibernate/build/gradle/gradle-upload-auth-plugin/1.0.2-SNAPSHOT/gradle-upload-auth-plugin-1.0.2-SNAPSHOT.jar
这里,首先创建需要的文件夹,不过注意,.m2这个文件夹不可能通过鼠标操作获得,需要通过cmd命令行创建。把文件放到该路径下,重新执行。
2. 重新执行后,出现下面的情况
额,此时才发现,原来拷贝网页中的内容然后创建pom文件似乎有问题,直接从网页打开pom文件后另存一个pom文件出来问题就解决了。但也出现另外一个问题,
汗死,原来pom文件名虽然改成了gradle-upload-auth-plugin-1.0.2-SNAPSHOT.pom,但是pom文件里面的版本号没改。修改上述问题以后重新执行,出现下面的提示:
乖乖,终于搞定一个jar,上面的提示说明其他的引用关系找不到,ok,按照上面的做法一个一个搞定。
3. 搞定上述问题后重新执行,最后出现如下报错,使用gradle build –debug调试后,发现如下错误:
根据提示,检查代码,发现注释中存在一些乱码,怀疑是老外的代码里面用了些特殊的字符,没关系,反正我也只在乎代码内容,将这些乱码的地方删除掉。
4. 在查找问题的过程中,发现一个帖子:
hibernate源码org.hibernate.hql.antlr文件夹空的解决办法下载后的hibernate源码文件中org.hibernate.hql.antlr是空的,要自己编译。
A special package for ANTLR-generated parser classes.
NOTE: The classes in this package are generated from the ANTLR grammar files, do not register them into version control.
1.把antlr.jar拷到jdk的lib下面,配置环境。
2.进入源码的grammar文件夹。
3.按顺序运行java antlr.Tool hql.g;java antlr.Tool hql-sql.g;java antlr.Tool sql-gen.g
4.把生成的java文件考到org.hibernate.hql.antlr下面即可。
按照上述文档中的说明,我去检查了文件系统,发现,确实缺少文件,于是配置antlr,最后安装说明,在文件夹中执行antlr的脚本如下图。
再完成了上述操作后,我再次执行gradle build。
提示操作成功。我对hibernate的编译操作终于完成了