我正在开发一个Liferay应用程序,它包含两个不同的portlet,两者都必须共同进行某些操作,因此我决定将这些操作放在外部Utils类的静态方法中。
我必须外化该类以避免在两个portlet中复制相同的代码,并且我希望将portlet放在不同的WAR文件中。
我知道我可以将Utils类封装在一个JAR文件中,但我们仍在开发中,我们不想重新生成JAR并为每次更改重新启动Tomcat。
哪个是最佳选择,我该如何执行?
答案 0 :(得分:4)
如果您使用的是Liferay SDK,则可以使用clients
(最近更改为shared
)目录来放置您的公共代码。
一个很好的例子是deploy-listener-shared与deploy-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
然后将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
。