Liferay开发环境配置说明文档

阅读更多

转载自From Elias的个人主页

1. 文档说明

2. 基本环境配置

2.1 准备必须的软件,并进行环境参数配置

2.2 下载Liferay程序包

2.3 安装和配置基本的Eclipse运行环境

3. 基于Tomcat开发Portlet

3.1 配置扩展开发环境

3.2 添加插件支持

3.3 配置数据库和执行Liferay

3.4 完成一个最简单的JSP的Portlet

4. 改进和调试Liferay自身代码

4.1 安装Orion服务器

4.2 在Eclipse中配置Orion

4.3 修改Orion配置参数

4.4 修改Liferay的配置文件

4.5 向Orion上部署Liferay系统

4.6 另一种调试Portlet组件的方法

1.  文档说明

本文基于Tomcat开发Portlet的部分根据Liferay官方的Quick Start文档中“Writing a simple JSP Portlet”章节的内容试验精简而成,依据的文档版本是RC1,日期2006-06-15。对Liferay自身代码的编译、调试环境则参考了原Liferay 3.6.1版本官方文档的“User Guide”对应章节。因为本文档对说明文字进行了一些简化,以及官方文档有可能在您读到本文时又有更新,因此仍建议参考官方文档原文,以明确一些细节的意义。但官方文档也存在一些错误,这里书写的内容对本文指明的各软件的特定版本号是已经试验成功的,因此也建议在读官方文档的时候同时参考本文。

按照本文的步骤完成后,能够建立一个在Windows下的Eclipse工具中开发兼容Liferay的Portlet组件的基本环境,或者建立一个在Windows下的Eclipse工具对Liferay自身的源代码进行编译、调试、改进的环境。按照你的需要,不一定要同时配置这两种环境,具体说明可参照对应章节开头的说明文字。当然,你也可以把两种环境都配置起来,通过试验来找到适合自己的方法。如果希望采取命令行的方式进行更多的开发环境定制,以及在Linux环境下进行开发等,那么可以再继续参考官方文档的Developer Guide中的有关章节。

2.  基本环境配置

本节安装配置Liferay有关开发必须的一些软件,这些软件在后面章节都会用到,因此本节的内容是不可跳过的。

2.1  准备必须的软件,并进行环境参数配置

安装如下软件:

J2SDK 1.4.1 (虽然官方文档推荐使用1.4.2版本,但是使用1.4.2版本的话,在Liferay的部分功能中会出现中文乱码问题;而到Liferay 4.0为止,还没有做到与Java 1.5的完全兼容);

Jikes 1.21 (官方文档声称这个软件不是必装的,可以使用J2SDK中的标准编译器代替,但是实际试验中,使用标准编译器会出现一些奇怪的问题,而且Jikes给出的编译错误信息也更为丰富,推荐安装使用;Jikes 1.22及以上版本是仅兼容Java 1.5的,无法与1.4版本的J2SDK一起使用,因此不要使用这些版本);

Apache Ant 1.6.5 (对Ant的版本倒是没有特殊要求,只是因为我使用的是Ant 1.6.5,所以我就这么注明了);

以上三个软件可以在实验室公用FTP的/pub/Liferay/tar/ 目录下找到,另外也可以上这些软件的官方网站自行下载,具体网页地址请自己Google一下。

J2SDK下载后是exe格式的安装文件,而Jikes和Ant都是zip压缩包,直接解压即可。这样我安装完三个软件分别到如下三个目录:

C:\j2sdk1.4.1_07

C:\jikes-1.21

C:\apache-ant-1.6.5

接着在系统中设定环境变量,右键点击“我的电脑”,选择“属性”,再选择“高级”-》“环境变量”,在“系统变量”中修改或者加入:

JAVA_HOME C:\j2sdk1.4.1_07

JIKES_HOME C:\jikes-1.21

ANT_HOME C:\apache-ant-1.6.5

如果系统中设置了CLASSPATH环境变量,则去除之,以防止冲突

给path环境变量加入 %ANT_HOME%\bin;%JAVA_HOME%\bin;%JIKES_HOME%\bin

之后重启系统,使环境变量生效。

2.2  下载Liferay程序包

本文直接使用了发布版本的4.0的源代码和二进制包,当然也可以利用Subversion接口直接访问Liferay在Sourceforge上的库使用最新的源代码版本,不过下面的试验只是基于发布版本的代码包完成的,共计需要下载:

Liferay-portal-src-4.0.0.zip LifeRay 4.0 正式版的源代码包;

Liferay-portal-tomcat-4.0.0.zip LifeRay 4.0 正式版的Tomcat二进制绑定包,提供测试新Portlet的执行环境(如果只打算编译调试Liferay自身的代码,而不打算开发新的独立Portlet组件,则可以不下载这个包);

以上文件包可以在Liferay官方网站的连接或者Sourceforge上下载到,我已经将他们全部放置到实验室公用FTP的/pub/Liferay/tar/Liferay4_final/ 目录下了。

将Liferay-portal-src-4.0.0.zip解压到D:\Liferay\portal 目录下备用。

2.3  安装和配置基本的Eclipse运行环境

在Eclipse官方网站下载最新版本的Eclipse IDE环境,在实验室公用FTP的/pub/Liferay/tar/ 目录放置了Eclipse 3.1.1的zip安装包,可直接下载使用。

我将之解压到了C:\j2sdk1.4.1_07\eclipse 目录下,双击eclipse.exe文件运行之;

File->Switch Workspace,输入d:\Liferay,点击OK确认;

File->New->Project->Java Project,输入项目名称为“portal”,保持默认的“create new project in workspace”,选择“Finish”结束。

如果上一步成功,那么已经可以在左侧栏看到源代码的目录结构了;并且右键点击项目的根目录,选“Properties”,选“Java Build Path”的“Libraries”标签,应该能够看到所有需要的jar格式库文件在里面了;

Window->Show View->Ant,在新出现的Ant标签栏点击加号,选择项目源码根目录上的build.xml文件;

3.  基于Tomcat开发Portlet

本节通过配置一个基于Liferay的Tomcat绑定二进制包建立一个扩展开发Liferay的环境,这个环境特别适用于对新的Portlet组件进行调试和开发。这个方法几乎不会修改Liferay自身的代码,所有的改动都是在扩展环境里完成,可以在Liferay升级时比较容易地实现扩展了的功能的迁移。

但这个方法也有一个缺点,就是开发的Portlet如果不执行deploy步骤,就不能在Liferay里启用。因此在开发和调试Portlet的过程中,一般还是在Liferay以外的环境中开发调试好,之后移植到此扩展开发环境中,与Liferay联调,成功后部署应用。具体工作中,可以与后面“改进和调试Liferay自身代码”一节中调试Portlet的方法稍作比较,选择适合自己情况的方法。

3.1  配置扩展开发环境

为了方便进行自己的修改和定制开发,同时又能与Liferay的更新保持兼容,我们使用单独的目录来放置自己的修改,这样在Liferay发布新版本时,可以直接升级Liferay部署,而不会与我们的修改相冲突。具体地,我使用了d:\Liferay\ext 目录来放置所有的扩展(包括JSP、class文件及依赖库等)。

首先要在d:\Liferay\portal 目录下建立一个名为“release.${username}.properties”的配置文件,其中${username}就是当前Windows登陆的用户名,可以通过“开始菜单-》运行-》cmd.exe”后显示的默认路径看到,跟在“Documents and Settings”字样后面的就是当前登陆的用户名。这样,我的配置文件的名称是release.administrator.properties 。文件的内容只写一行:

Get Code

lp.ext.dir={Liferay}/ext

其中“{Liferay}”指的是Liferay源代码存放的上级目录,比如我写的这一行就是:

Get Code

lp.ext.dir=d:\Liferay/ext

回到上一节建立好的Eclipse中的Ant视图中,双击展开根节点Portal,应该可以看到很多Ant任务,顺序执行 clean, start, build-ext 。屏幕下方的命令行窗口会跳跃大堆大堆的文字提示信息,如果一切正确,那么其中不应该有红色的错误信息(绝大多数此处可能出现的错误都是配置文件不正确所引起的)。一切正常的话,那么d:\Liferay\ext 目录下应该生成了很多东西了。

我们将前面准备好的与Tomcat绑定的Liferay Professional版本的压缩包解压到d:\Liferay\ext\servers\tomcat 目录下,并且在d:\Liferay\ext 目录下建立一个名为app.server.{username}.properties的文件,在我这也就是app.server.administrator.properties ,文件内容写如下两行:

Get Code

lp.ext.dir={Liferay}/ext

app.server.type=tomcat

在我这也就是:

Get Code

lp.ext.dir=d:\Liferay/ext

app.server.type=tomcat

然后仿照前面在Eclipse里建立新的Java工程的方法,建立一个新的Java项目,指向d:\Liferay\ext 目录,也就是说,在输入Java项目的项目名称时,输入“ext”而不是前面输入“portal”。

3.2  添加插件支持

为了能够在基于Tomcat的Liferay Porfessional版本的运行环境上实现我们编写的插件的调试,需要给Eclipse环境添加一个借助Tomcat服务器开展调试的插件,也就是Sysdeo这个插件,可以到 http://www.sysdeo.com/eclipse/tomcatplugin 下载,我下载的是tomcatPluginV31.zip文件(这个文件我也放到了实验室公用FTP的/pub/Liferay/tar/ 目录下。将下载的这个zip文件包解压,拷贝到Eclipse安装目录的plugins目录下,比如我这里就是拷贝到了C:\j2sdk1.4.1_07\eclipse\plugins\ 目录下。关闭并且重启Eclipse,如果插件安装成功,那么在界面的左上角应该可以看到Tomcat的图标。

现在我们来配置Sysdeo插件的参数,在Eclipse里“Windows->Preferences”,选择“Tomcat”标签,选择“Version 5.x”版本,然后修改参数“Tomcat Home”为“{Liferay}\ext\servers\tomcat”,在我这里也就是“D:\Liferay\ext\servers\tomcat ”;修改参数“Configuration File”为“{Liferay}\ext\servers\tomcat\conf\server.xml”,在我这里也就是“D:\Liferay\ext\servers\tomcat\conf\server.xml”。

接着我们要继续给Tomcat执行的JVM虚拟机增加运行参数,启用JAAS支持以及扩大默认内存占用量,也就是展开“Tomcat”标签,选择“JVM Settings”,在“Append to JVM Parameters”选择“Add”,先添加

Get Code

-Djava.security.auth.login.config=d:\Liferay/ext/servers/tomcat/conf/jaas.config

再添加

Get Code

-Xmx512m

还要在这里修改Tomcat运行所使用的虚拟机,要注意这里必须指定一个JDK附带的虚拟机而不可以指向JRE附带的虚拟机环境,否则Tomcat在运行过程中会出现错误。如果这里的下拉选项没有出现与JDK中虚拟机有关的选项,那么我们要首先手动建立一个,我们需要到Java标签下的“Installed JREs”,选择“Add”,“JRE home directory”选择“C:\j2sdk1.4.1_07”,给这个JRE环境起个名字,比如“J2SDK1.4.1_07”,之后点Ok保存设置,再重新开启“Window->Preferences”对话框,到Tomcat的“JVM Settings”项选择刚才建立的“J2SDK1.4.1_07”这个JRE就可以了。

这样,只要再配置好Liferay的数据库连接参数,就可以通过点击Eclipse里面的Tomcat图标启动Tomcat服务器了。

3.3  配置数据库和执行Liferay

这里选择了使用MySql数据库,到MySql官方网站下载或者到实验室公用FTP的/pub/soft/database/MySql/ 目录下载MySql在Windows下的可执行包mysql-5.0.21-win32.zip、MySql的JDBC驱动程序mysql-connector-java-3.1.12.zip、MySql管理工具mysql-administrator-1.1.9-win.msi、MySql数据查询工具mysql-query-browser-1.1.20-win.msi、MySql数据建模工具mysql-workbench-1.0.6-beta-win32.msi。

除JDBC驱动外,其他几个包都可以双击执行安装向导完成。安装完毕后,使用MySql数据查询工具Query Browser连接数据库,选择“File->Open Script”载入D:\Liferay\ext\sql\create 目录下的create-mysql.sql 文件,点击“Execute”按钮执行。刷新会发现得到了新的数据库实例lportal。

使用MySql管理工具administrator,以root用户连接数据库,点“User Administration”,在左下方用户帐号列表一栏点击右键,建立新用户Liferay,输入密码sql606,点击“Schema Privileges”标签,点击lportal数据库,把除了grant权限外的所有权限都给Liferay这个用户,点击“Apply changes”按钮保存这个新账户。这样完成了数据导入以及建立MySql数据库用户的过程。

编辑D:\Liferay\ext\servers\tomcat\conf\Catalina\localhost 目录下的ROOT.xml文件,将其中的

Get Code

 

替换为

Get Code

 

请注意,这里如果按照官方文档的说法设置会出现错误,官方文档将数据库url中的“&”错误地写成了“&”,会造成Tomcat启动失败。

再解压MySql的JDBC驱动程序mysql-connector-java-3.1.12.zip 中的mysql-connector-java-3.1.12-bin.jar 文件,复制到D:\Liferay\ext\servers\tomcat\common\lib 目录下,使得Liferay能够找到MySql的JDBC驱动。

这样数据库有关的内容已经全部配置完成,可以点击Eclipse里面的Tomcat图标启动Liferay了,如果没有出现错误,那么已经可以用浏览器访问http://localhost:8080 访问到Liferay Professional版本的Tomcat服务。

这里要注意,Sysdeo插件与Liferay的Tomcat绑定二进制包默认指定的Hypersonic数据库驱动有冲突,所以我们在本节使用了MySql数据库。如果一定要使用Hypersonic数据库的话,就不能通过Sysdeo插件启动Tomcat,而需要直接执行D:\Liferay\ext\servers\tomcat\bin 目录下的startup.bat来启动。

3.4  完成一个最简单的JSP的Portlet

我们通过完成一个最简单的类似Hello World那样的JSP Portlet来展示Portlet的基本组成部分,更复杂的功能或者基于Structs等框架的Portlet请参见后续文档。

在D:\Liferay\ext\ext-web\docroot\html\portlet\ext 目录建立一个新的文件夹myjspportlet 。接着打开D:\Liferay\ext\ext-web\docroot\WEB-INF 文件夹下的portlet-ext.xml 文件进行编辑,加入对这个即将建立的新Portlet的描述,如下:

Get Code

 〈portlet〉
  〈portlet-name〉EXT_2〈/portlet-name〉
  〈display-name〉My JSPPortlet〈/display-name〉
  〈portlet-class〉com.Liferay.portlet.JSPPortlet〈/portlet-class〉
  〈init-param〉
    〈name〉view-jsp〈/name〉
    〈value〉/portlet/ext/myjspportlet/view.jsp〈/value〉
  〈/init-param〉
  〈expiration-cache〉300〈/expiration-cache〉
  〈supports〉
    〈mime-type〉text/html〈/mime-type〉
  〈/supports〉
  〈portlet-info〉
    〈title〉My JSP Portlet〈/title〉
  〈/portlet-info〉
  〈security-role-ref〉
    〈role-name〉Power User〈/role-name〉
  〈/security-role-ref〉
  〈security-role-ref〉
    〈role-name〉User〈/role-name〉
  〈/security-role-ref〉
 〈/portlet〉

其中各项的含义为:

portlet-name 描述此Portlet的规定名称,这个名称必须是唯一不重复的。

display-name 记录此Portlet在Portal中的显示名称,在将Portlet加入到Portal中时如果看到了这个名字,那么就可以找到现在编写的这个Portlet组件,此名称不必是唯一的。

portlet-class 描述与此Portlet对应的Java类的完整路径。

init-param 通过name/value对的形式指定此Portlet初始化时的参数。

expiration-cache 定义Portlet输出缓存的超时时间,以秒为单位,超出这里指定的时间后就认为Portlet的输出已经超时了,如果这里是-1则说明输出永远不超时。

supports 包括所支持的MIME格式,同时定义对一种特定的MIME格式,此Portlet所支持的模式,所有的Portlet都必须支持View模式。

portlet-info 定义Portlet有关的信息。

security-role-ref 包含Web应用与系统角色之间的映射,在Liferay中,这里表示什么样的角色有权限访问此Portlet。(一般来讲,Power User有权个人化Portal,而User无权进行个人化)

现在我们已经完成了对Portlet的描述,现在我们建立此Portlet的JSP页面,到刚才创建的myjspportlet目录下,建立一个名为init.jsp的文件,加入如下两行:

Get Code

<%@ include file="/html/common/init.jsp" %>

这两行导入了每个Portlet都要包含的公共class文件以及公共变量,如果需要导入此Portlet专用的类或者进行此Portlet专用的变量的初始化,那么可以仿照common/init.jsp 文件中的写法写在myjspportlet目录下的init.jsp文件中。

再添加一个名为view.jsp的文件,此文件将包含Portlet要输出的内容,再文件中写入“Hello your name here!”。Portal能够找到并且执行这个JSP文件是因为我们在portlet-ext.xml文件中的init-param标签指定了view-jsp参数的值是/ext/myjspportlet/view.jsp ,这个JSP文件就被作为默认的JSP页面被显示了。

最后,我们需要在D:\Liferay\ext\ext-ejb\classes\content 目录下的Language-ext.properties 文件中加入下面这行,才能在Portal中加入我们创建的这个Portlet:

Get Code

javax.portlet.title.EXT_2=My JSP Portlet

因为我们已经创建了扩展开发环境,因此我们可以通过Ant脚本来向Portal添加我们新创建的这个Portlet。在Eclipse的Ant视图中,导入D:\Liferay\ext 目录下的build.xml文件,之后执行deploy [default]这个Ant任务,就可以完成新Portlet的发布。当这个任务执行完毕,启动Tomcat,登陆系统,就可以在“添加内容”功能中找到我们新创建的Portlet了。

4.  改进和调试Liferay自身代码

本节将建立一个编译、调试Liferay自身代码的环境。如果希望参与Liferay社区对Liferay Portal的改进开发、提交补丁等,则需要按照本节的说明配置开发环境。

此外,本节也能建立一种开发和调试Portlet组件的环境,依赖于Orion服务器的热部署特性,能够实现对Portlet组件的实时调试。但是,由于本节的调试环境是一个完整的J2EE环境,因此也是比基于Tomcat的方法更为沉重庞大的选择,也说不上简洁高效。具体做Portlet开发时还要根据自己工作的具体状况和对J2EE的熟悉程度选择一种Portlet开发环境。

4.1  安装Orion服务器

Liferay官方在开发时使用的就是Orion服务器,因此虽然可以使用其他的J2EE Server配置开发环境,我们还是选择了Orion。而且Orion服务器对开发者和非商业应用提供一个免费使用的授权,同时文档支持和应用程序的热部署功能也不错,还是值得推荐的。

首先到Orion的官方网站http://www.orionserver.com 下载Orion服务器的二进制文件,我选择的是2.0.6版本,那会是一个zip压缩包。将这个压缩包中的内容解压到C:\j2sdk1.4.1_07\orion 目录下。这时进入这个目录,使用“java -jar orion.jar”指令应该能够在http://localhost 上运行起来了。

4.2  在Eclipse中配置Orion

在Eclipse中通过“Run->Debug..”菜单进入Debug环境设置对话框。在“Java Application”下面有个“orion”标签,我们需要修改这个标签下面的参数。

“Main”标签下的“Project”项需要改为“Portal”,原来写的是“ext”,其他的选项保持默认的即可,也即“Main class”一项仍保持为“com.evermind.server.ApplicationServer”。

“Arguments”标签下,开始Eclipse会报错,说“${ORION_HOME}”变量没有定义,我们点击“Program arguments”栏目下的“Variables”按钮,在新弹出的对话框中点击“Edit Variables...”按钮,点击“New”,“Name”项输入“ORION_HOME”,“Value”项输入“C:\j2sdk1.4.1_07\orion”,点击3次Ok关闭对话框。这样“Program arguments”栏仍保持为“-config ${ORION_HOME}/config/server.xml userThreads”;“VM arguments”还保持为“-Xbootclasspath/a{workspace_loc}\portal\lib\xercesImpl.jar;${workspace_loc}\portal\lib\xml-apis.jar -Xmx512m -Dfile.encoding=UTF-8 Duser.timezone=GMT”。

在“Classpath”标签下,将“User Entries”下带环境变量的orion.jar引用路径删除,然后点击“Add External JARs”按钮,重新添加本机上的orion.jar库文件。

在“JRE”标签,选择“Alternate JRE”,改为“j2sdk1.4.1_07”,如果这里使用纯JRE的运行环境而不是JDK附带的运行环境,很可能会造成Orion运行中的一些编译类的错误。

4.3  修改Orion配置参数

编辑C:\j2sdk1.4.1_07\orion\config\server.xml 文件,在行

Get Code

下面添加行

Get Code

并且加入行

Get Code

        classpath="C:\j2sdk1.4.1_07/jre/lib/rt.jar" />

来启用jikes编译器。其中C:\j2sdk1.4.1_07/jre/lib/rt.jar 指向JDK附带的JRE运行环境库。如果不启用jikes,则会使用sun的JDK附带的编译器,可能与Liferay代码造成冲突,因此建议启用jikes。

建立新目录C:\j2sdk1.4.1_07\orion\config\web-sites ,在其中建立文件portal.Liferay.com-web.xml ,文件内容如下:

Get Code

 
 


 
        
        
        
        
        
        
 

我没有找到test-web和axis-web包,因此我没有启用这两项。

编辑C:\j2sdk1.4.1_07\orion\config\application.xml文件,添加如下行:

Get Code

 


        
        
        
        


        


        


        
        


        


        
                description
                
                
                
        


        
                
                
                
                
                
                
        


        

官方文档说如果使用了“80%9dbf%99a0e7%9a%84ae%9abd%8d96e58fbc%8c88%99a6%81bf%9daf%819cgreen%C:' rel='nofollow'>file:”这样的定位方式,则要保证在C:\j2sdk1.4.1_07\orion\applications\ 目录中没有portal-ejb.jar文件,通常这个文件产生于Ant脚本的Deploy过程。不过我不清楚官方文档为什么提出这一点,也没发现有什么影响。可能如果存在这个jar文件,则源码目录下的classes文件都会被覆盖,这样如果只是修改并编译了源码目录下的classes文件,很可能由于jar文件的覆盖而没法生效,给调试带来麻烦。

接着配置MySql数据源,参考3.3节 配置数据库和执行Liferay的做法,在数据库中建立与Liferay对应的数据库lportal,将MySql的Java版本驱动的jar文件复制到C:\j2sdk1.4.1_07\orion\lib 目录下。再编辑C:\j2sdk1.4.1_07\orion\config\data-sources.xml ,使之内容如下:

Get Code

 
 


 
        
        
 

4.4  修改Liferay的配置文件

Liferay使用一个名为portal.properties 的文件来配置一些重要的参数,但我们一般不要直接修改这个文件,而是另外写一个配置文件来覆盖里面的设置即可,这样可以比较容易地使我们的修改与Liferay的官方设置相兼容。在D:\Liferay\portal\util-java\classes 目录下建立一个名为portal-ext.properties的文件(官方文档写这个文件的存放位置写错了)。填写这个文件的内容为:

Get Code

portal.ctx=/portal

4.5  向Orion上部署Liferay系统

在D:\Liferay\portal\ 目录建立一个app.server.{username}.properties 文件,在我的机器上就是app.server.Administrator.properties 文件({username}的含义参考“3.1节 配置扩展开发环境”,文件内容为

Get Code

app.server={orion}

在我这写的就是

Get Code

app.server=C:/j2sdk1.4.1_07/orion

到Eclipse的Ant视图顺序执行portal项目中的start和deploy任务。记得删除portal-ejb.jar文件。

在Eclipse中用Debug界面启动Orion,这时应该可以在http://localhost:8080 看到启动的Liferay了。(如果Ant脚本运行的时候说什么javac类找不到,那么调整Eclipse菜单中的:Windows->Preferences窗口中的Ant配置,把JDK的lib目录下的tools.jar文件显式引用进去,就一切正常了(不可以是JRE的lib目录下的tools.jar文件,那不一样)。)

4.6  另一种调试Portlet组件的方法

在Liferay的portal源码工作环境下,还有一种开发调试Portlet组件的方法。我们用D:\Liferay\portal\portlets\sample-jsp-portlet.war 这个Liferay自带的Portlet作为例子。

我们将D:\Liferay\portal\portlets\sample-jsp-portlet.war 目录复制成为D:\Liferay\sample-jsp-portlet 目录,之后修改C:\j2sdk1.4.1_07\orion\config\application.xml文件,添加如下行

Get Code

再修改C:\j2sdk1.4.1_07\orion\config\web-sites\portal.Liferay.com-web.xml 文件,在其中添加如下行

Get Code

之后重启Orion,登陆Liferay后就可以在“Add Content”界面的Test类别中找到这个sample-jsp-portlet。

网页取于 http://www.elias.cn/pmwiki.php?n=Develop.LiferayPortalDev

 

你可能感兴趣的:(配置管理,EXT,Tomcat,MySQL,Eclipse)