构建Roller源码之前须保证JDK5.0和Ant已经安装并配置完毕。
出于测试的需要,Tomcat和MySql也应该安装完毕,并且MySQL Driver以及Roller的数据库和用户名都已设置完毕。
另外还要有个IDE工具,我的是Eclipse,源码构建离不了IDE。
1:从Apache.org下载Roller源码,可以从SVN Checkout 也可以直接Download源码,目前的版本为4.0。
2: 将下载的Roller解压缩,将mail.jar和activation.jar拷贝到tools/lib下。
3:进入apps/weblogger,编辑properties.xmlf,添加如下代码(粗体),将mail.jar和activation.jar放入classpath。
<fileset id=”base.jars” dir=”${ro.tools}/lib”>
<include name=”commons-id-0.1-SNAPSHOT.jar”/>
<include name=”commons-collections-3.2.jar” />
<include name=”commons-codec-1.3.jar” />
<include name=”commons-digester-1.6.jar” />
<include name=”commons-httpclient-2.0.2.jar” />
<include name=”commons-logging-1.0.4.jar” />
<include name=”commons-lang-2.1.jar” />
<include name=”concurrent-1.3.2.jar”/>
<include name=”jaxen-full.jar” />
<include name=”saxpath.jar” />
<include name=”jdom.jar”/>
<include name=”lucene-1.4.3.jar”/>
<include name=”log4j-1.2.11.jar”/>
<include name=”rome-0.9.jar”/>
<include name=”rome-fetcher-0.9.jar”/>
<include name=”velocity-1.5.jar”/>
<include name=”guice-1.0.jar”/>
<include name=”activation.jar”/>
<include name=”javamail.jar”/>
</fileset>
4:编辑build.xml,将SVN(粗体)部分注释掉。
<!– Get the SVN last changed rev value w/o using the overly flakey
svnant task. This will fail if svn is not in your PATH but the only
negative impact will be that the rev number that appears in your
log will be “${svn.LastChangedRev}” instead of the correct value.
<delete file=”${ro.build}/svn.properties” />
<exec executable=”svn” output=”${ro.build}/svn.properties” failifexecutionfails=”false”>
<arg value=”info” />
<arg value=”${root}” />
</exec>
<replace dir=”${ro.build}”>
<include name=”svn.properties” />
<replacetoken> </replacetoken>
<replacevalue></replacevalue>
</replace>
<property prefix=”svn” file=”${ro.build}/svn.properties”/>
<echo file=”${build.compile.business}/roller-version.properties”>
ro.version=${ro.version}
ro.revision=${svn.LastChangedRev}
ro.buildTime=${ro.buildTime}
ro.buildUser=${user.name}
</echo>–>
5:在web/WEB-INF/classes/下新建一个roller-custom.properties文件,文件内容如下,这个文件用来告诉Roller数据库以及mail server的连接参数。
installation.type=auto
database.configurationType=jdbc
database.jdbc.driverClass=com.mysql.jdbc.Driver
database.jdbc.connectionURL=jdbc:mysql://localhost:3306/roller_db
database.jdbc.username=your name
database.jdbc.password=your password
mail.configurationType=properties
mail.hostname=your SMTP server
mail.username=your mail user name
mail.password=your mail password
6:ant dist,没有意外,应该可以在dist/webapp下生成一个war包, 可以将此war包发布到tomcat的webapp下进行部署。
7:启动Tomcat,Listener error,部署失败,看log是发生了NullPointerException,没关系, 接下来我们将在Eclipse中对代码进行调试。到这里为止,可以基于源码Build一个Roller的部署文件。
8:在Eclipse中新建一个Java Project,类型为Java project from existing Ant buildfile,选择刚刚编辑过的build.xml文件,项目建立后,配置一下build path,将缺的包补上。
9:编辑org.apache.roller.weblogger.business.WebloggerImpl,修改下面这段代码,添加一个捕捉NullPointerException的块。
Properties props = new Properties();
try {
props.load(getClass().getResourceAsStream(”/roller-version.properties”));
} catch (IOException e) {
log.error(”roller-version.properties not found”, e);
}catch(NullPointerException e2){// new code
log.error(”roller-version.properties not found”, e2);
}
10:编辑org.apache.roller.weblogger.business.startup.DataBaseInstaller文件,修改如下代码:
try {
props.load(getClass().getResourceAsStream(”/roller-version.properties”));
} catch (IOException e) {
log.error(”roller-version.properties not found”, e);
}catch(NullPointerException e2){//new code
log.error(”roller-version.properties not found”, e2);
}
11:回到Roller解压目录/apps/webblogger下,ant clean,删除已构建的文件,ant dist,重新构建,重新部署,再启动Tomcat,一切OK。
12:至此,可以在Eclipse中对Roller进行二次开发并进行构建和部署,不足的是不够直观,每次构建很耗时,在去掉build.xml中的打包指令后,速度提高了一些,曾想把源文件按照Eclipse web project的目录进行组织,不过始终担心在这个过程当中遗失什么东西而无法发觉,最终决定笨些没关系,稳妥是第一位的。