Liferay - 在两个不同的portlet之间共享Utils类

时间:2012-10-24 14:37:13

标签: liferay share portlet

我正在开发一个Liferay应用程序,它包含两个不同的portlet,两者都必须共同进行某些操作,因此我决定将这些操作放在外部Utils类的静态方法中。

我必须外化该类以避免在两个portlet中复制相同的代码,并且我希望将portlet放在不同的WAR文件中。

我知道我可以将Utils类封装在一个JAR文件中,但我们仍在开发中,我们不想重新生成JAR并为每次更改重新启动Tomcat。

哪个是最佳选择,我该如何执行?

4 个答案:

答案 0 :(得分:4)

如果您使用的是Liferay SDK,则可以使用clients(最近更改为shared)目录来放置您的公共代码。

一个很好的例子是deploy-listener-shareddeploy-listener-hook一起使用的方式。

从它看起来,您需要做的所有配置是修改将使用client \ shared类的build.xml文件。如果您查看deploy-listener-hook的build file,您可以看到您需要添加的所有内容。

对于新SDK:

<property name="import.shared" value="my-utils-shared" />

对于较旧的SDK:

<property name="dependent.clients" value="my-utils-client" />

希望这有帮助!

答案 1 :(得分:2)

还有另一种方法涉及构建JAR文件,但它不需要重新启动服务器(至少在Tomcat上)。

为您的JAR文件编写构建脚本,以便编译,构建JAR并最终将其复制到以下位置:

{tomcat}/webapps/ROOT/WEB-INF/lib
  • 然后在您的portlet中打开“liferay-plugin-package.properties”(在Liferay Developer Studio / Liferay IDE中,这应该打开一个漂亮的GUI)。
  • 然后将JAR的名称添加到此文件中的“portal-dependency-jars”列表中,以便在它想要的源代码中(或者只需点击GUI中的“添加”按钮并选择JAR即可想):

    门户依赖性-罐子=我的定制-lib.jar,我的 - 其他定制-lib.jar

  • 保存文件,然后重新部署portlet,并在部署portlet时复制JAR。

我已经将这种方法用于自定义JAR,以及我需要在我的portlet中使用的第三方JAR。

答案 2 :(得分:0)

对于开发阶段,只需将jar文件与两个应用程序打包在一起。

除非一个应用程序以某种方式依赖于另一个应用程序,否则完全可以。

另一种解决方案是使用JRebel工具。它允许您在tomcat中重新部署jar而无需重新启动。

答案 3 :(得分:0)

另外,你可能在一个.war中有几个portlet。您可以在portlet.xml

中定义它们