4

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

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

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

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

4

4 回答 4

4

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

一个很好的例子是deploy-listener-shared如何与deploy-listener-hook结合使用。

从它的外观来看,您需要做的所有配置就是修改build.xml将使用客户端\共享类的文件。如果您查看 deploy-listener-hook 的构建文件,您可以看到所有您需要添加的是。

对于新的 SDK:

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

对于旧版 SDK:

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

希望这可以帮助!

于 2012-10-24T23:26:42.880 回答
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):

    portal-dependency-jars=my-custom-lib.jar,my-other-custom-lib.jar

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

我已经将此方法用于自定义 JAR 和需要在我的 portlet 中使用的第 3 方 JAR。

于 2012-10-26T07:18:09.453 回答
0

此外,您可能在一个 .war 中拥有多个 portlet。您可以只在portlet.xml.

于 2013-02-04T12:01:22.683 回答
0

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

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

另一种解决方案是使用 JRebel 工具。它将允许您在不重新启动的情况下在 tomcat 中重新部署 jar。

于 2012-10-27T10:46:05.660 回答