Liferay7.0开发学习(一):开发环境搭建

2016年05月09日 Liferay 评论 18 条 阅读 4,365 views 次

Liferay 7.0的开发和之前的版本有不小的差异,本文搭建一个基本的开发环境的思路和方法。

6.x的环境搭建的文章,请参考之前的博客:《Liferay6.2.5GA6开发环境搭建

软件环境:

liferay-portal-tomcat-7.0-ce-ga1-20160331161017956.zip

liferay-portal-src-7.0-ce-ga1-20160331161017956.zip

liferay-plugins-sdk-7.0-ce-ga1-20160331161017956.zip

liferay-ide-eclipse-windows-x64-3.0.0-ga1-201604280251.zip

以下软件的下载可以从 https://sourceforge.net/projects/lportal/files/?source=navbar 这里进行下载。

如果采用的是JDK7.0及以下的版本,在启动Liferay IDE后会找不到Liferay的相关插件。

注意1:Liferay 7.0的开发需要JDK8的环境。

注意2:Liferay 7.0运行需要的是JDK,而不仅仅是JRE(正常的J2EE软件的运行需要jre就足够)。

不然出现此篇博客的情况:《Liferay7启动报错There is an error in invoking javac.

注意3:Liferay 7.0的开发SDK不是必须的,属于可选状态。

将以上资源解压在某一个目录里面,最好是根目录,并对上面的文件进行重命名,不然在解压时可能会出错误,说路径太长的情况。

我的解压目录一般如下,可以参考:

Lifera工程目录

liferay 7.0采用OSGI的架构,开发模式基本支持两种,传统模式和OSGI的模块开发模式。

传统模式(基于ant或者maven)

传统模式依赖于SDK,和6.2的开发基本上一样。

第一步:进行SDK的目录。找到build.properties文件,将此文件复制一份并重命名为build.${username}.properties,其中的${username}为当前系统的用户名称,我的命名后的文件名为:build.huqiwen.properties,可以打开CMD的控制台查看。

第二步:使用文本编辑器(如notepad++)打开,找到里面的app.server.parent.dir这个变量,将他的值修改为当前的Portal的路径,如我的修改后为:

app.server.parent.dir=I:/liferay7/portal

注意:在windows环境下,路径要将正斜杠修改为反斜杠。

第三步:启动liferay IDE,新建插件工程 New Liferay Plugin Project,如下图所示(如果启动后找不到,请检查当前电脑上使用的是不是JDK8,如果是8以下的JDK会出现找不到的情况):

创建Liferay插件工程

第四步:在上面的向导中输入工程的名称,点击next,选择Liferay MVC,点击下一步,在这里会让选择SDK的目录,选择我们上面输入的SDK解压目录即可。如果这里选择SDK后出现下面的错误:

The app.server.deploy.dir(I:\liferay7\sdk/../bundles/tomcat-8.0.32/webapps) is not valid.

请回过头检查第一步是否有做,或者是用户名是否正确。

第五步:在创建好的工程里面写相应的代码,完成后使用ant的deploy进行部署即可。

注意:在第一次创建工程的时候会下载大量的jar包,所以需要网络后,看着像卡差不动一样,一般根据网络情况,可能需要5-30分钟左右的时间。

OSGI模块模式(基于Gradle)

Liferay 7.0新增了基于Gradle构建系统的开发,这种是7.0推荐的模式。

第一步:创建liferay Workspace Project,如下图,输入工作区的名称。同一个Eclipse的工作区里面只能创建一个Workspace Project。

New Liferay workspace project

第二步:点击完成即可,此过程需要下载jar包,速度会比较慢,根据网络情况而定。下载的是gradle的zip包,具体是下载到当前用户目录下面的.gradle目录下面。

注意:如果网络比较慢,可以下载我下载好的目录,然后解压到自己的用户下面的目录里面,一般是在C盘(系统盘),用户--当前系统的登录用户名下面,可以找到一个.gradle的目录,将下面的下载后解压到里面,重新创建Liferay Workspace即可。

百度云分享地址:链接:http://pan.baidu.com/s/1pKFQf71 密码:r5jx

第三步:工作区创建好后如下图所示,如果下面是空的,没有下面的modules、configs等,说明是创建失败了,一般是由于网络问题,可能是gradle的包下载出错引起的。Liferay workspace demo

第四步:在菜单中点击New Liferay Module Project,在Project Template Name那里选择mvcportlet,如果是要创建数据库,选择servicebuilder,其他几种模式是OSGI的开发,后面再说明。

第五步:在下一步中输入组件名称和包路径,然后点击完成。此时会在上面工作区里面的modules里面看到我们刚才新建的Portlet插件工程。

第六步:在这个工程里面主要有两个目录,src/main/java和src/main/resource,前面是来放java代码,后面是来放JSP和一些资源文件等。

第七步:写完代码我们现在可以将页面视图切换到Liferay Workspace,默认就已经切换,如果没有进行些切换,在右边找到Gradle Tasks,如下图,找到我们创建的工程,然后点击下面的build,双击里面deploy,将会对我们当前的工程进行打包部署。

gradle task

注意:这里点击deploy正常就应该部署到Liferay tomcat里面,但是此时没有部署到Liferay tomcat里面。需要做如下修改,在上面的工作区里面找到gradle.properties文件,打开在里面添加如下的配置,后面的是liferay Tomcat所在的目录,不然只会将生成的jar包在上面工作区里面的module里面,需要手动的将jar包复制到deploy里面部署。

liferay.workspace.home.dir=I:/liferay7/portal

第八步:如果现在我们要在这个Portlet里面访问Liferay里面的其他API,比如JournalArticle的相关API,需要在上面的portlet工程里面的build.gradle,添加相应的依赖。

在dependencies里面添加:

compile group: "com.liferay", name: "com.liferay.journal.api", version: "2.0.0"

这个添加是com.liferay.journal.api的依赖,熟悉maven的一眼就看出来,前面是定义的作用域,第二部署是group,第三部分是name,第四部分是版本号。

现在的IDE有一个问题,为添加依赖后不会自动刷新jar包,需要在项目上点击右键-->gradle-->refresh Gradel Project,执行之后会从远程仓库下载jar包,此时在我们的工程里面就可以使用相应的jar包了。

 

开发环境的搭建与简单介绍就到这里。

用户头像

18 条留言  访客:14 条  博主:4 条

  1. ant编译提示这个错误,,不知楼主遇到没恩。
    install-portal-snapshot:
    [copy] Copying 1 file to H:\workspace-liferay\portal-master\util-taglib
    [artifact:install] [INFO] Installing H:\workspace-liferay\portal-master\util-taglib\util-taglib.jar to C:\Users\mrluo\.m2\repository\com\liferay\portal\com.liferay.util.taglib\2.1.1-SNAPSHOT\com.liferay.util.taglib-2.1.1-SNAPSHOT.jar
    [delete] Deleting: H:\workspace-liferay\portal-master\util-taglib\pom.xml
    [propertyfile] Updating property file: H:\workspace-liferay\portal-master\.gradle\gradle.properties
    [exec] Parallel execution with configuration on demand is an incubating feature.
    [exec] Forced cache is enabled.
    [exec] fatal: Not a git repository (or any of the parent directories): .git
    [exec] FAILURE: Build failed with an exception.
    [exec] * Where:
    [exec] Script ‘H:\workspace-liferay\portal-master\modules\build-module.gradle’ line: 4
    [exec] * What went wrong:
    [exec] A problem occurred evaluating script.
    [exec] > Failed to apply plugin [id ‘com.liferay.plugin’]
    [exec] > Process ‘command ‘git” finished with non-zero exit value 128
    [exec] * Try:
    [exec] Run with –info or –debug option to get more log output.
    [exec] * Exception is:
    [exec] org.gradle.api.GradleScriptException: A problem occurred evaluating script.

    • avatar 龙渊之人

      你的错误搞定了吗?我的liferay-ide-eclipse-windows-x32-3.0.0-ga1-201604280251.zip解压都报错?

  2. 我想问下为什么我输入的SDK解压目录它提示我 This sdk location is not correct 第一步我已经照做了

  3. 现在sdk目录正确了 但是我点击finish 它提示我build failure
    build-common-ivy.xml:81: HTTP Authorization failure 请问下这是什么原因

    • avatar 胡启稳

      找到SDK目录下面的ivy-setting.xml文件,删除里面liferay-private相关的内容,这个是在7.0.2里面添加的,当时写的这个博客的时候7.0.1里面还没有

  4. 问题解决了 需要把properties里面的修改成ivy.version = 2.3.0 和
    ivy.jar.url =http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar

  5. 您好我按照您的步骤来得 卡在了第四部和第五部之间 就是点击finish后 报错Error creating liferay plugin plugin project.pllease see eclipse error log for more detaiils. 可能是sdk的问题 请问您有好的解决办法 或者有正确的sdk包吗? 炸了两天了

  6. avatar 北京皮卡丘

    您好,按照您的步骤在进行OSGI模块模式,模仿demo时,把.gradle下载下来放到我的用户目录下了,然后我重新创建workspace project依然什么都没有,只有一个名字,consol窗口很快就提示成功.这是什么原因导致的,麻烦胡老师讲一下

  7. 请问老师,我刚开始研究liferay7。我在liferay7 mvcportlet中,要调用其他bundle的接口,除了在build.gradle引入需要的jar包外,在部署到liferay时,我把需要应用的jar包放到liferay tomcat root工程的lib下了。但我发现报错。如下:

    09:52:59,112 ERROR [Framework Event Dispatcher: Equinox Container: 203445c1-19c1-0016-10df-90d654689f99][product:97] FrameworkEvent ERROR
    org.osgi.framework.BundleException: Could not resolve module: product [501]_ Unresolved requirement: Import-Package: org.apache.commons.beanutils; version=”[1.9.0,2.0.0)”_ [Sanitized]
    at org.eclipse.osgi.container.Module.start(Module.java:429)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1562)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

    我搞了好久了,也没有发现问题出现在哪里

  8. 补充一下,如果引用liferay自己的bundle,就不会报错。如果引用第三方的,就会报错。

  9. 已解决。使用includeresource

    • avatar 胡启稳

      方法基本上有一种:
      1、将jar包部署到liferay里面,丢到deploy目录下面;也就是作为一个osgi的模块部署;
      2、使用includeresource;
      3、使用Include-Resource;
      2和3的区别,一个是打包后是class文件,一个是jar包文件。我后面写一篇博客说明这个。

  10. 请问下服务器无法联网,osgi模块基于gradle ,把你提供的.gradle和部署好的能联网的服务器上的用户文件中的.bnd ;.eclipse ; .gradle ; .liferay; .p2等相关文件都考到无法联网的服务器上,还是无法创建 New liferay Workspace Project ,报错:no name matching services.gradle.org ;请问这个怎么解决啊,谢谢您

  11. 老师,我想在不同的War 之间传递Session数据,于是使用到了PortletSession,根据官方文档,我注解配置了com.liferay.portlet.private-session-attributes=false,但是在liferay7,还是获取不到数据。
    我不晓得士哪里搞错了?
    https://web.liferay.com/zh/community/forums/-/message_boards/message/85949078 我在老外网站上也求助了,但没有解决回复

  12. 补充以下,我使用的是session.setAttribute(“LIFERAY_SHARED_username”, name,PortletSession.APPLICATION_SCOPE);

给我留言

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

用户登录

分享到: