Liferay 6.1开发学习(五):编译调试修改源码

Liferay是一个开源的项目,开源项目的好处有两个,一方面我们可以通过阅读源码提高水平,了解一些技术的实现原理,另一方面是如果开源的产品不能满足我们的实际需求,可以通过修改源码实现。Liferay CE版可以免费获取源码,EE版需要购买过产品才能获取源码。

以下文件虽然是基于Liferay 6.1.1所写,但Liferay 6.2.0版本同样适用,方法、过程、需要注意事项等均一致

一、导入源码

源码可以从Liferay的官方网站上下载。http://www.liferay.com/downloads/liferay-portal/available-releases

下载后解压源码,可以使用Eclipse的File-->Import-->General-->Existing Projects in to Workspace。将解压的源码导入到Eclipse中。

导入源码后,如果是6.1.1的源码,可能会出现如下的错误:Project 'portal-trunk' is missing required source folder: 'portal-web/test'。此错误是说在build path下面找不到test目录。解决方法有两个(6.2.0中导入源码后,也有类似问题,解决方法同下面两个原理一样):

1、在portal-web下面建立一个名为test的目录。

2、打开源码工程目录下面的.classpath文件(使用文本编辑器打开,editplus或notepad++),在其中找到<classpathentry excluding="**/.svn/**|.svn/" kind="src" path="portal-web/test"/>(大概在11行),将此行注释掉或删除。然后回到Eclipse中刷新工程(选中工程按F5,或在右键菜单中选择刷新)。

二、编译源码

既然要调试源码,首先是需要能够对源码进行编译。Liferay的源码不是一个普通的Web工程,不能使用普通的方法进行编译部署。但liferay官方已经提供了相应的ant脚本进行编译部署,但首先还需要一些简单的设置。

1、打开liferay的源码目录,找到app.server.properties文件。

2、将些文件复制一份,重命名为app.server.{username}.properties的文件,其中的{username}为当前系统的帐号名称。如我的系统帐号是huqiwen,则将其命名为app.server.huqiwen.properties即可。具体的可以打开CMD,以里面显示用户名为准。如下图:

Liferay 6.1开发学习(五):编译调试修改源码_第1张图片

3、打开此文件,找到app.server.parent.dir=${project.dir}/../bundles。将后面的${project.dir}/../bundles替换为下载的绑定Liferay的Tomcat的路径,如我的为E:/code/liferay6.1/liferay-portal-6.1.1-ce-ga2,则修改后的地址为: app.server.parent.dir=E:/code/liferay6.1/liferay-portal-6.1.1-ce-ga2。注意:从地址栏里面复制的地址为正斜杠,请修改成反斜杠。

4、现在Eclipse的ant面板里面点击,add buildfiles,将portal源码里面的build.xml文件添加到ant面板里面。

5、点开此build文件,先点击compile,再点击deploy,即可将源码编译部署到tomcat中。

三、debug源码

在二的基础上deploy后,即可对liferay的相关源码进行编译调试。如果是第一次进行debug,可能会跳转到显示Source not found,此时,点击下面的“edit source lookup path”,在弹出的对话框里面点击Add -->Java Project,在这里将我们的Portal-trunk工程勾选上,点击OK等,即可开始Liferay的源码调试。

四、常见问题

1、在编译的时候出现如下错误

Task cannot continue because ECJ is not installed.

ECJ was automatically installed. Please rerun your task.

这个问题在前面的博客里面提到过,http://www.huqiwen.com/2012/09/01/liferay-6-1-development-study-2-create-portlet-project/

解决方法为:

原因是ECJ包没有找到,ECJ是什么?ECJ, the Eclipse Compiler for Java, is an open source incremental compiler used by the Eclipse JDT. It is an option for Liferay builds and is in many cases faster than Javac or Jikes. The jar for ECJ is included in Liferay release 4.4.0 and later.http://www.liferay.com/community/wiki/-/wiki/Main/ECJ这是官方解释。大概意思是ECJ是一个编译优化包,可以提升比Javac和JIKES更好的编译速度。要想使编译通过,有两个两个方法:

方法一:禁用ECJ。在Liferay的SDK下面找到build.Administrator.properties,此处中间的Administrator名称不一定是这样的,具体体系名称是根据当前系统的用户名生成的。在里面添加如下内容

javac.compiler=modern
#javac.compiler=org.eclipse.jdt.core.JDTCompilerAdapter

方法二:将ECJ的包添加到ant的路径里面。ecj.jar包可以在Liferay的工程的源码包\lib\development下面找到。将此包添加到ant的路径里面。Windows-->preferences-->Ant-->Runtime,在右边的Classpath-->Ant Home Entries(Default) -->Add External JARs,将ecj包添加进来。

2、在编译源码的时候出现:

Please set the environment variable ANT_OPTS to the recommended value of
"-Xmx1024m -XX:MaxPermSize=512m".

这个提示的意思是说当前的JVM参数设置的太小了,不够liferay编译使用,需要增加JVM内存的分配,并建议将Xmx参数设置成1024m,MaxPermSize设置成512m。这是因为liferay的源码比较大,内容比较多,使用了大量的classloader等,需要比较大的内存。

解决方法上面已经给出提示了将环境变量(其实就是JVM的参数)推荐设置成上面的提示。

1)在Liferay工程的源码里面的build.xml上点击右键-->Run as-->External Tool Configurations

2)在tab标签里面找到Environment,点击new,在name里面输入ANT_OPTS,在value里面输入-Xmx1024m -XX:MaxPermSize=512m,然后点击apply。

3)再次运行ant的编译,即可正常编译。

3、如果出现类似如下错误,请参考上文的“二、编译源码”

Tomcat is not installed in E:/liferay/6.2/bundles/tomcat-7.0.42. If you already have Tomcat
installed, make sure the property "${app.server.tomcat.dir}" points to your
Tomcat installation. If you wish to automatically install Tomcat into


转自:Liferay 6.1开发学习(五):编译调试修改源码 | IT人生录

你可能感兴趣的:(Liferay 6.1开发学习(五):编译调试修改源码)