都说roller在国外是二次开发博客系统的首选,但是下载源代码之后发现是它是基于netbeans项目结构开发的。平时用习惯了Eclipse,所以想搬到MyEclipse上面,但没有想到居然那么不容易,折腾了整整一天,才最终跑起来。网上的参考信息太少,大概都是那二三篇的转贴,全部结合起来就差不多可以解决,借此总结一下,希望用到的朋友有参考作用!
1. 准备环境
MyEclipse 6.0
JDK 1.6.0_05
Tomcat 5.5.27 (建议用5.5以上版本)
Roller 4.0.1
2. 下载Roller
从Roller的主页http://roller.apache.org/ 下载最新的roller版本,目前是4.0.1,同时下载源代码包和官笔发布程序包的zip,分别为apache-roller-src-4.0.1.zip和apache-roller-4.0.1.zip。
下载发布程序的原因是源源代码包里有一些内容和发布包不一致,导致源代码在Eclipse中编译后在运行时会报错,因为对源代码不熟悉,所以还无法定位到错误的原因所在。另外一些配置文件只有在它官方的发布包中才有,一会要用到它。
3. 搭建项目环境
在MyEclipse中新建一个Web项目,命名为roller,J2EE环境选择1.4。
解压缩roller的二个包,为了说明的方便,我们把apache-roller-src-4.0.1.zip的解压缩后目录叫做roller-src,把apache-roller-4.0.1.zip的解压缩后目录叫做roller-bin。
①把roller-src/apps/weblogger/src/java目录下的org整个目录的源文件复制到项目中的src里面;
②向lib中添加jar文件。二种方法,可以从roller-src中的tools目录中逐个目录地把所有的jar文件拷贝出来,为了简单起见,还是从它的发布程序中直接拿更方便,从roller-bin中的WEB-INF/lib下面的所有jar都复制出来,放到我们的项目中的lib中去;
③ roller默认是使用MySQL数据库,但是lib里面缺少MySQL的JDBC驱动,所以还要自己从网上下载驱动的jar,添加到WEB-INF/lib中,如果你是使用的其它数据库,同样需要手动下载它对应的驱动程序;
④从roller-bin中复制除了WEB-INF目录以外的所有文件,粘贴到我们项目中的WebRoot下面,这些是页面文件和一些资源文件;
⑤复制roller-bin中的WEB-INF目录下除了classes外的所有文件到我们项目中的WEB-INF目录下,覆盖掉默认的web.xml,你还可以发现它的一些jsp文件是放在WEB-INF下面的,起到很好的保护作用,roller是基于struts2开发的;
⑥从roller-bin中的WEB-INF/classes目录中,复制除了org目录外的所有文件,到我们项目中的src里面,这些是系统的配置文件,包括了国际化资源、struts配置、log配置、数据库脚本等等。
⑦ roller还用到了邮件功能,需要把activation.jar,mail.jar二个j2ee的jar复制到tomcat的common/lib目录下,如果没有这一步,可能启动初始化会失败!导致应用无法正常运行。
到这里,所有的文件就已经全部搬到MyEclipse上面了,接下来要修改一些内容使用我们的项目能正常部署。
4. 修改部分内容
①在我们项目的src中新建一个名称为roller-custom.properties的文件,roller采用这个扩展配置现覆盖系统的默认配置。网上有些说要把这个文件放到tomcat的common/classes中,其实不用的,只要放在classpath中能找到就行了,所以我们把它放在我们的src目录下面,方便修改,在该文件中添加如下内容:
installation.type=auto
database.configurationType=jdbc
database.jdbc.driverClass=com.mysql.jdbc.Driver
database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8
database.jdbc.username=scott
database.jdbc.password=tiger
mail.configurationType=properties
mail.hostname=smtp-server.example.com
mail.username=scott
mail.password=tiger
注意database.jdbc.connectionURL这个配置后面需要带上上面编码的参数,不然安装的过程可能会出现一些乱码。修改url和username,password这些,如果你有能正常使用的邮箱服务器,也填上。
②创建MySQL数据库,名称为rollerdb,并指定编码为UTF-8。如果你使用的是root用户,则不用授权,如果不是,则需要为用户授权,下面是一个示例:
启动roller的时候它会查询数据库是否已经初始完成,如果没有,它会自动进入安装页面,引导用户进行安装,做得非常人性化。
③修改部分源代码。org.apache.roller.weblogger包里面的pojos包是有问题的!刚开始的时候老是无法启动,报错提示的是JPA的一个异常,根本不知道如何解决,后来在CSDN上找到一篇文章,说是pojos这个包的源码有问题,可能跟发布包中的版本不一致,所以需要用变态一点的处理办法。
在我们的项目WEB-INF/lib中,找到roller-business.jar和roller-web.jar(如上图所示),这二个jar其实就是我们src中的所有java文件的编译打包,为了不重复,先把roller-web.jar删除掉,然后用winrar打开roller-business.jar,删除pojos以外的其它四个包和那个WebloggerException.class。这样,其它代码可以正常编译!
下面是最终的基本结构截图(仅参考):
WeRoot目录截图
Src目录截图:
5. 其它补充说明
按照上面的步骤,项目结构就基本上正常搭建了,真是费心费力!NetBeans下面没有试过,兴许会比这个简单许多!反正都习惯Eclipse了,就都移过,后面再花些时间研读一下它的源代码,网上说是非常好的学习例子。
① Roller的系统全局配置文件是放在org.apache.roller.weblogger. org.apache.roller.weblogger.config包中的roller.properties中的。在这里能找到各项系统的配置,我们自己手动创建的roller-custom.properties是用来覆盖一些常用属性的。
② src下面的dbscripts是所有数据库的SQL脚本,apache-roller-src-4.0.1.zip中提供的脚本是不完整的!所以需要使用正式发布包的脚本,它带了数据库的初始脚本,由系统自动引导创建,还有许多版本升级的补充脚本。
③默认的log配置是用文件形式,保存在tomcat的的logs目录中,名称为roller.log的,如果你启动的过程遇到问题,请到这里去查看启动日志,分析一下异常的原因。
④ roller-custom.properties中配置的邮箱主机和用户名密码等,如果无法正常连接,它初始化时会报错,但是不会影响正常启动,前提是你必须把activation.jar,mail.jar这二个文件放到tomcat里面。
⑤在调试的过程中发现org.apache.roller.weblogger.business.WebloggerImpl类的创建方法中有加载roller-verion.properties,但是在我们的src中没有找到这个文件,原来是在roller-business.jar中包含了。好像另一个类也包含这一句启动的初始代码,如果找不到这个类,会抛出空指针Exception,同样导致整个应用启动失败。所以刚开始的时候生硬地在WebloggerImpl类中115行加载了一段异常处理代码如下:
当然,如果你已经包含了roller-version.properties文件,这个异常是不会存在的!
⑥ Roller的文档非常齐全,图文并茂,多多阅读,就可以了解它的使用方法。IBM 开发者论坛就是基于它进行开发的,的确非常强大,想了解struts2、JPA、Spring、Acegi、Velocity等主流技术的都可以从这里找到示例,不过要多花些时间,从其它方面,比如结构划分、代码规范、theme切换等,都可以学习到很多东西。
⑦Roller Architecture(摘自网络)
Roller Web:Web and UI Layer
* Editor UI via Struts and JSP,blog and feed rendering via Velocity
* Feed parsing via ROME, Blogger API via Apache XML-RPC
Roller Beans:Business and Persistence Layer
* Hibernate/JPA for DBMS,Lucene for search
多多学习,愿和大家共同分享!^_^
这里打包一个PDF文件提供下载: 将Apache Roller部署到MyEclipse上面
刚进场的时候戏就落幕