2

我使用 hook maven 原型创建了一个 liferay Hook 插件,并覆盖了/html/common/themes/top_js-ext.jspf. 在我需要使用自定义功能的 jsp 中,我有一个单独的 jar。该 jar 是通过 maven 依赖项包含的,并且项目编译得很好,但是当我运行 jsp 时,门户找不到导入的类。

我怎样才能解决这个问题 ?我应该手动将自定义 jar 包含在 liferay 的 lib 目录中吗?

如果我理解正确,JSP 是在 Hook 插件的上下文之外执行的,因此自定义类不可用。有没有办法我可以使用 maven 构建插件,以便门户找到我的自定义 jar,而无需手动将它们移动到门户的类路径?

4

3 回答 3

2

有多个选项可以使您的自定义 jar 可用于运行时。首先,您可以考虑将它们放入插件的 WEB-INF/lib 目录

[..] 将 JAR 文件放在 custom-jsps 文件夹的 WEB-INF/lib 文件夹中 [..]

另一种方法是创建一个 ext 插件并将您的 jar 文件放入 ext-lib/portal 或 ext-lib/global 目录。完成ext-plugin的部署后,它们将分别可用于您的所有 tomcat 的 webapps(在 ext-lib/global 的情况下)或门户网站(以 tomcat/webapps/ROOT 的形式出现)。

于 2013-04-11T08:20:33.553 回答
1

取出 java 类文件的 jar 并将其放在 root/web-inf/lib 中并重新启动它。

于 2013-04-10T11:06:11.070 回答
0

JSP 在门户的类加载器中执行,即使它是通过单独的 Web 应用程序(挂钩)部署的。因此,您可以选择

  • 将您的自定义代码添加到 Liferay,例如根上下文(如 NivasKulukuri 所述)
  • 将您的自定义代码添加到全局类路径
  • 通过使用类加载桥访问您的自定义代码(例如阅读有关 PortletClassInvoker 的信息)。Liferay Servicebuilder 在其类加载代理(以 Clp 结尾的类名)中使用此类方法来跨 Web 应用程序调用
  • 考虑另一种实现方式,例如,只需将所需的 JS 代码添加到您的自定义主题中。如果您有许多需要此更改的主题,请考虑引入一个共同的父级(我推荐这种方式作为最好的可维护方式)

类加载桥的缺点是使用它们感觉就像在反射中编程——你不想经常做任何事情。尤其是你不想经常维护的东西。

于 2013-04-11T08:20:12.683 回答