Liferay 6.1开发学习(二):创建一个Portlet工程

2012年09月01日 Liferay 评论 49 条 阅读 44,778 views 次

使用Liferay的SDK创建一个简单的Portlet,此Portlet不包括业务逻辑、不包括数据库,只有简单的页面展现,用以说明Portlet的开发过程。

一、创建Portlet工程

1、打开Liferay IDE,File-->New-->Liferay Project

创建一个Portlet示例

2、为Portlet工程取名为Study,点击完成。或者点击下一步,默认选择Liferay MVC。

补充说明:

Portlet:这个是一般做Liferay开发选择的项目,一般说Liferay插件工程,通常都是指的Portlet工程。他的结构和内容和普通的WEB工程区别不大。

Hook:Liferay的Hook是什么东西呢?这个单词中文可以翻译成钩子。是用于重写或覆盖Liferay的一些默认方法或页面。为开发提供了一种在不直修改Liferay核心源码的情况下修改Liferay核心功能的方法。

Ext:扩展工程的开发方法是Liferay早期版本推荐的开发方法,在6.x版本之后对ext开发模式逐渐不再推荐,主要使用Portlet的开发方法。扩展开发可以继承Liferay的Portal的大部分接口方法,而Portlet里面可以使用的接口方法均是Services包里面暴露的API。但是和Liferay的核心工程耦合太大,当Liferay的版本升级时对Ext工程的影响太大,基本需要重新修改。所以一般不推荐使用Ext模式。

Layout:布局模板,Liferay的布局是可以定制的,如一个页面中是两栏式还是三栏式,每个栏里面又有几行等等,可以使用此模式进行快速开发。

Theme:主题包。Liferay IDE提供的可以帮助开发人员、设计人员快速开发Liferay主题包的功能,通过此模式提供的向导工具等,为主题包的开发大大的提供了便利。

Portlet部署

Liferay的开发大量依赖Ant(也可以使用maven),在Liferay的开过程中,编译、代码生成、打包、部署等都是基于Ant完成的。

1、Liferay 的IDE在Liferay的portlet开发模式下,ant面板默认是可见的,如果找不到可以通过Window-->Show View-->Ant(如果没有可以在other里面找到)

2、在ant页板里面,点击Add-buildfiles将Build.xml文件添加进来。

添加ant文件

3、点击Study-portlet前面的小三角,在出现的下拉菜单里面,双击deploy,等待Liferay完成部署操作。

如果在此时出现如下错误:

Task cannot continue because ECJ is not installed.

ECJ was automatically installed. Please rerun your task.

原因是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包添加进来。

4、启动Tomcat。此portlet工程会自动部署。

5、打开http://localhost:8080/,登录系统。点击左上角的添加-->更多-->示例,在这里面可以看到我们刚建立的study portlet,点击添加,可以将此portlet添加到页面上。

添加portlet

Portlet工程结构

一个Portlet工程的大概结构如下:

portlet结构

1、src:这里存储Java相关文件包,后面会看到还有一个services包。

2、web.xml:此web.xml和普通的web工程的web.xml文件一样。

3、build.xml,此文件为ant的构建文件,一般不需要修改继承自SDK。

4、Liferay-plugin-package.properties,此文件为包工程的元数据信息文件,一般开发不需要关注。

5、portlet.xml:portlet定义描述文件,这个文件是标准的portlet 2.0(JSR 268)规范的文件。在这里定义的信息为portlet的名称、初始化参数、模式类型、portlet的相关信息、权限等。在此文件里面我们可以看到view-template对应的的是/view.jsp,当我们在Liferay里面添加此portlet后,看到的页面内容就是view.jsp里面的内容。下面的security-rol-ref定义的是哪些角色拥有此portlet的权限。

6、Liferay-portlet.xml:此文件是liferay扩展的portlet的内容,portlet.xml文件里面是标准的Portlet内容,所有的Portal容器的portlet.xml文件描述、结构都是一样的。但liferay基于自身平台的需求,又添加了一个Liferay-portlet.xml来扩展portlet的信息。在这里可以看到角色映射,以及Liferay的一些个性化信息,后面有需要的时候详细说明。

7、liferay-display.xml:在上一个步骤里面我们在添加portlet的时候,看到study这个portlet是位于示例这个目录下面的,此文件就是定义相关的portlet是放置在哪个目录下面显示的。

说明:

在Liferay里面,portlet的名称一般不要重复,portlet.xml,liferay-portlet.xml,lifray-display.xml这三个文件之间的关联就是通过portlet 名称做标识进行关联。

用户头像

49 条留言  访客:36 条  博主:7 条   引用: 6 条

  1. Watching the Broncos / 49ers while implementing some JDBC logic for this new widget.

  2. avatar 大漠狐烟

    这个教程很好,我从头一步一步的按照楼主的来做,可是现在遇到了一个问题,我新建Study
    portal项目后,用ant编译也通过了,但是在启动Liferay v6.1CE Server(Tomcat 7) at localhost [Debugging, Synchronized]后,打开http://localhost:8080,登录后,并没有在“示列”下面看到Study这个portal啊,这是怎么回事啊,请楼主指教,QQ:775399625

    • avatar 胡启稳

      你有没有使用ant的deploy部署工程?如果没有请重新deploy一次

      • avatar 信任

        爆ecj那个错误后,我采用第二种解决方法,但是启动server后,还是找不到study,重新部署又停在信息: Initializing Spring root WebApplicationContext过不去,采取第一种方法,又爆这个错:Unsupported major.minor version 51.0

      • avatar 信任

        我刚刚又随便创建了几个portlet,虽然最后还是显示的Initializing Spring root WebApplicationContext,但在示例里面都可以找到,但还是没有最开始建的study那个示例

      • avatar 楼主好

        楼主。 我也碰到大漠孤烟相同的问题的。 我也deploy重新部署过。不知道问题出在哪里。是按照你操作一步步做下来的。

    • avatar 哇咔咔

      查看\tomcat-6.1.2\liferay-portal-6.1.2-ce-ga3文件夹中的portal-setup-wizard.properties文件中的liferay.home配置是否正确 应该是deploy所在的目录!

  3. 为什么 我新建liferay project时总是出现 failed while installing liferay Portlet 6.0
    我sdk版本什么的配置的都是6.1 ❓

  4. 真心的不错···3Q

  5. avatar hanyou

    你的文档,让我受益匪浅,非常感谢!

  6. avatar jiaozg

    和 大漠狐烟一个问题,deploy成功了,但是就是在示列”下面看不到Study这个portal啊 后来发现ant打包没有部署到tomcat,只是放到sdk下面,需要
    手动把war包拷贝到liferay-portal-6.1.2-ce-ga3\deploy去部署就可以了
    build-common-plugin.war:
    [delete] Deleting: F:\liferay\liferay-plugins-sdk-6.1.1\dist\Study-portlet-6.1.1.1.war
    clean-portal-dependencies:
    [zip] Building zip: F:\liferay\liferay-plugins-sdk-6.1.1\dist\Study-portlet-6.1.1.1.war
    deploy:
    [copy] Copying 1 file to F:\liferay\bundles\deploy

    • avatar yansj

      很好!谢谢分享~

    • avatar Elaine

      每次都需要手动拷war包么,有没有更好的办法?

      • avatar 胡启稳

        在IDE里面执行ant deploy,不需要自己手动复制war包

        • avatar juke

          我也遇到类似的问题了 是在IDE中执行ant deploy的但是生成的war包都在一个**\Liferay\bundles\deploy文件夹下 需要拷贝到**\Liferay\liferay-portal-6.1.2-ce-ga3\deploy目录下才行。请问怎么解决

          • avatar 胡启稳

            这个算是bug吧,6.1.2的配置文件有变更,但是IDE没有更新,所以有这个小问题,可以自己修改一下SDK下面的build.properties文件里面的“auto.deploy.dir”参数,将他指向正确的deploy目录

        • avatar juke

          嗯 解决了 谢谢了啊 能加您Q不 有很多知识想请教啊~

  7. avatar huangminwen

    您好,请教一下 ,按照您写的步骤部署portlet的时候,出现com.liferay.portal.kernel.deploy.auto.AutoDeployException: com.liferay.portal.kernel.deploy.auto.AutoDeployException: demo-portlet-6.1.1.1.war does not support this version of Liferay错误, liferay home/deploy下面已经有该portlet了,但是实例中却搜索不到,请问这是什么原因了,谢谢!

    用的环境跟您环境搭建那篇是一样的

    • avatar 胡启稳

      上面的提示有嘛,版本不对,你的这个portlet是6.1.1的,你看一下你的Liferay版本是不是6.1.1

      • avatar huangminwen

        没想到这么快就回复了啊,谢谢!

        版本是6.1.1的啊

        03:20:58,653 ERROR [liferay/scheduler_dispatch-3][PluginPackageUtil:1326] Unable to load repository http://plugins.liferay.com/official com.liferay.portal.plugin.PluginPackageException: Unable to communicate with repository http://plugins.liferay.com/official
        03:21:03,845 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][AutoDeployDir:215] Processing demo-portlet-6.1.1.1.war
        03:21:03,847 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][PortletAutoDeployListener:79] Copying portlets for /home/huangmw/liferay/liferay-portal-6.1.1/liferay-portal-6.1.1-ce-ga2/deploy/demo-portlet-6.1.1.1.war
        03:21:03,849 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][BaseDeployer:820] Deploying demo-portlet-6.1.1.1.war
        03:21:03,854 ERROR [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][AutoDeployDir:246] com.liferay.portal.kernel.deploy.auto.AutoDeployException: com.liferay.portal.kernel.deploy.auto.AutoDeployException: demo-portlet-6.1.1.1.war does not support this version of Liferay
        com.liferay.portal.kernel.deploy.auto.AutoDeployException: com.liferay.portal.kernel.deploy.auto.AutoDeployException: demo-portlet-6.1.1.1.war does not support this version of Liferay
        at com.liferay.portal.tools.deploy.BaseDeployer.autoDeploy(BaseDeployer.java:209)
        at com.liferay.portal.deploy.auto.PortletAutoDeployListener.deploy(PortletAutoDeployListener.java:86)
        at com.liferay.portal.kernel.deploy.auto.AutoDeployDir.deploy(AutoDeployDir.java:51)
        at com.liferay.portal.kernel.deploy.auto.AutoDeployDir.processFile(AutoDeployDir.java:230)
        at com.liferay.portal.kernel.deploy.auto.AutoDeployDir.scanDirectory(AutoDeployDir.java:271)
        at com.liferay.portal.kernel.deploy.auto.AutoDeployScanner.run(AutoDeployScanner.java:54)

        第一个ERROR应该没什么影响吧
        [PortletAutoDeployListener:79] Copying portlets for /home/huangmw/liferay/liferay-portal-6.1.1/liferay-portal-6.1.1-ce-ga2/deploy/demo-portlet-6.1.1.1.war
        这句话检测出来的是6.1.1这个版本的,但是deploy目录下面是有portlet了,但是启动服务器的时候一直报的都是这个错

        顺便问一下,这个留言的回复在哪里有消息提示呢,还是要自己看留言版的内容

        • avatar 胡启稳

          是的,第一个error没有影响,回复你输入正确的邮箱的时候,会发送到你的邮箱。
          之前的那个错误是显示版本不匹配,可能是你使用同样的数据库启动过其他版本的Liferay?

          • avatar huangminwen

            恩,谢谢!

            机子上确实有另一个版本,是公司的项目,但是具体不知道升级到6点几了,不过两个项目用的数据库的并不一样,我重启机子试一下~~~

          • avatar 胡启稳

            你检查一下你使用的数据库中的release_表里面的buildnumber是不是6101,6101表示的是6.1.1,如果不是就是有其他版本的Liferay连接过这个数据库

          • avatar huangminwen

            显示的是6102,看来是版本不对的问题,这个是我自己的失误,最早的时候用的是6.2,后来照您的教程新建portlet时部署时,一直连接网络寻找资源,后面就换了6.1.2,还是这个问题

            之前新建库表时在工程目录下面有有各种版本的数据库表,现在6.1.2这个版本,请问一下我应该运行哪一个文件呢?谢谢!

          • avatar huangminwen

            不好意思,是6.1.1的版本

          • avatar huangminwen

            实在抱歉,部署一下源码就有了,谢谢!

  8. 为什么我选了liferay mvc点finish之后,控制台里就开始连接服务器开始下载jar包,下了很久都没下完。 ❓

  9. hi,你好厉害呀,这个算是个人的作品吗?是使用liferay做的是吧!对我们公司也在用这个平台,最近我都在学,谢谢你,世上要是多点像你这样的好品质的人,相信软件行业会很光明的!关于那个liferay-portal-6.2.0-ce-ga1我有点要补充,将liferay-plugins-sdk-6.2.0/build.properties中的app.server.parent.dir=${sdk.dir}/../bundles 改为app.server.parent.dir=${sdk.dir}/../liferay-portal-6.2.0-ce-ga1(这个问题我也研究很久)

  10. avatar bu123dian

    楼主,我环境也弄好了,但是跟许多人一样,也是创建完工程之后,在liferay中的示例里面找不到,[email protected],求解!

  11. avatar 小雨点

    谢谢你的教程!按照你的教程一步步学习Liferay,但新建工程时出错
    点File-new-Project,选择Liferay Plugin Project,出错:
    An error has occurred. See error log for more details.
    NewLiferayPluginProjectOp.PortletFramework: PortletFrameworkValidationService.compute() has failed

  12. avatar 小雨点

    你好,教程中Portlet部署提到,在ant页板里面,点击Add-buildfiles将Build.xml文件添加进来。请问,我点击Add-buildfiles,为什么没看到Build.xml文件,谢谢!

  13. avatar 雅居江南

    胡老师:你好,我创建过程中,workspace的.log报这个错,但sdk的sdk.log提示创建成功。怎么处理,谢谢。详细错误日志见下:
    !ENTRY org.apache.ivyde.eclipse 1 0 2015-10-03 11:23:05.096
    !MESSAGE starting IvyDE plugin

    !ENTRY org.apache.ivyde.eclipse 1 0 2015-10-03 11:23:05.194
    !MESSAGE IvyDE plugin started
    !SESSION 2015-10-03 11:24:13.665 ———————————————–
    eclipse.buildId=4.4.0.I20140606-1215
    java.version=1.8.0_60
    java.vendor=Oracle Corporation
    BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=zh_CN
    Framework arguments: -product org.eclipse.epp.package.jee.product
    Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product

    !ENTRY org.eclipse.egit.ui 2 0 2015-10-03 11:24:23.857
    !MESSAGE Warning: EGit couldn’t detect the installation path “gitPrefix” of native Git. Hence EGit can’t respect system level
    Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory.
    The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in
    this system level configuration. The Git installation location can be configured on the
    Team > Git > Configuration preference page’s ‘System Settings’ tab.
    This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

    !ENTRY com.liferay.ide.project.core 4 0 2015-10-03 11:25:24.840
    !MESSAGE Error creating Liferay plugin project.
    !STACK 1
    org.eclipse.core.runtime.CoreException: Source ‘E:\liferay\myworkspace\.metadata\.plugins\com.liferay.ide.sdk.core\create\1443842716748’ does not exist
    at com.liferay.ide.project.core.PluginsSDKProjectProvider.doCreateNewProject(PluginsSDKProjectProvider.java:182)
    at com.liferay.ide.project.core.NewLiferayProjectProvider.createNewProject(NewLiferayProjectProvider.java:45)
    at com.liferay.ide.project.core.model.NewLiferayPluginProjectOpMethods.execute(NewLiferayPluginProjectOpMethods.java:109)
    at com.liferay.ide.project.core.model.NewLiferayPluginProjectOp$Impl.execute(Unknown Source)
    at org.eclipse.sapphire.ui.forms.swt.SapphireWizard.performFinish(SapphireWizard.java:370)
    at org.eclipse.sapphire.ui.forms.swt.SapphireWizard$3.run(SapphireWizard.java:334)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)
    Caused by: java.io.FileNotFoundException: Source ‘E:\liferay\myworkspace\.metadata\.plugins\com.liferay.ide.sdk.core\create\1443842716748’ does not exist
    at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1298)
    at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1191)
    at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1160)
    at com.liferay.ide.project.core.PluginsSDKProjectProvider.doCreateNewProject(PluginsSDKProjectProvider.java:176)
    … 6 more
    !SUBENTRY 1 com.liferay.ide.project.core 4 0 2015-10-03 11:25:24.841
    !MESSAGE Source ‘E:\liferay\myworkspace\.metadata\.plugins\com.liferay.ide.sdk.core\create\1443842716748’ does not exist
    !STACK 0
    java.io.FileNotFoundException: Source ‘E:\liferay\myworkspace\.metadata\.plugins\com.liferay.ide.sdk.core\create\1443842716748’ does not exist
    at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1298)
    at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1191)
    at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1160)
    at com.liferay.ide.project.core.PluginsSDKProjectProvider.doCreateNewProject(PluginsSDKProjectProvider.java:176)
    at com.liferay.ide.project.core.NewLiferayProjectProvider.createNewProject(NewLiferayProjectProvider.java:45)
    at com.liferay.ide.project.core.model.NewLiferayPluginProjectOpMethods.execute(NewLiferayPluginProjectOpMethods.java:109)
    at com.liferay.ide.project.core.model.NewLiferayPluginProjectOp$Impl.execute(Unknown Source)
    at org.eclipse.sapphire.ui.forms.swt.SapphireWizard.performFinish(SapphireWizard.java:370)
    at org.eclipse.sapphire.ui.forms.swt.SapphireWizard$3.run(SapphireWizard.java:334)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)

  14. avatar 贺德才

    Buildfile: D:\liferay-plugins-sdk-6.2\portlets\hellowrold2-portlet\build.xml
    deploy:

    BUILD FAILED
    D:\liferay-plugins-sdk-6.2\build-common-plugin.xml:482: The following error occurred while executing this line:
    D:\liferay-plugins-sdk-6.2\build-common.xml:993: The following error occurred while executing this line:
    D:\liferay-plugins-sdk-6.2\build-common.xml:299: The following error occurred while executing this line:
    D:\liferay-plugins-sdk-6.2\build-common.xml:1766: The following error occurred while executing this line:
    D:\liferay-plugins-sdk-6.2\build-common.xml:175: java.io.IOException: Cannot run program “C:\Program Files\Java\jdk1.7.0\jre\bin\java.exe”: CreateProcess error=206, ÎļþÃû»ò)չÃû

    Total time: 1 second
    这个问题该怎么处理啊

  15. avatar 小超人

    胡老师您好,我按照您的教程在一步步地练习,觉得写得非常详细,现在新建的工程能够部署成功,但是在示例下面没有新建的工程,且tomcat的deploy文件夹下有打包好的war。在控制台上报错:
    06:22:12,669 ERROR [AutoLoginFilter:232] Current URL / generates exception: com.liferay.portal.kernel.exception.SystemException: com.liferay.util.EncryptorException: com.liferay.util.EncryptorException: javax.crypto.BadPaddingException: Given final block not properly padded
    请问该如何解决这个问题呢

  16. 胡老师,我用liferay 6.2 创建项目 在第一步的时候 出现
    Must select a Liferay Portal runtime
    请问这是什么原因造成的?

  17. 你好,最近刚开始学习liferay,我用的是liferay6.2的
    在新建liferay项目的时候报错:BUILD FAILED
    D:\liferay\liferay-plugins-sdk-6.2-ce-ga6-20160112152609836\liferay-plugins-sdk-6.2\portlets\build.xml:5: The following error occurred while executing this line:
    D:\liferay\liferay-plugins-sdk-6.2-ce-ga6-20160112152609836\liferay-plugins-sdk-6.2\build-common-plugins.xml:5: The following error occurred while executing this line:
    D:\liferay\liferay-plugins-sdk-6.2-ce-ga6-20160112152609836\liferay-plugins-sdk-6.2\build-common.xml:60: The following error occurred while executing this line:
    D:\liferay\liferay-plugins-sdk-6.2-ce-ga6-20160112152609836\liferay-plugins-sdk-6.2\build-common-ivy.xml:130: The following error occurred while executing this line:
    D:\liferay\liferay-plugins-sdk-6.2-ce-ga6-20160112152609836\liferay-plugins-sdk-6.2\build-common-ivy.xml:81: HTTP Authorization failure
    不知道怎么弄

来自外部的引用: 6 条

  • Liferay 6.1开发学习(四):Service Builder | IT人生录
  • Liferay 6.1开发学习(九):Hook开发简介 | IT人生录
  • Liferay6.1简单增删改查示例 | IT人生录
  • Liferay 6.1开发学习(五):编译调试修改源码 | IT人生录
  • Liferay SDK目录结构说明 | IT人生录
  • Liferay 6开发学习(二十四):Liferay开发模式介绍 | IT人生录

给我留言

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: