2013-04-10 55 views
2

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

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

如果我正确地理解了这一点,那么JSP将在Hook插件的上下文之外执行,因此自定义类不可用。有没有一种方法可以使用maven构建插件,以便门户网站能够找到我的自定义罐子,而无需手动将它们移动到门户的类路径中?

回答

2

有多种选项可以让您的自定义JAR适用于运行时。首先,你可以考虑把他们变成你的plugin's WEB-INF/lib directory

[..]把你的自定义的JSP文件夹的WEB-INF/lib文件夹的JAR文件[..]

另一个方法是create an ext plugin并将你的jar文件放入ext-lib/portal或ext-lib/global目录中。完成deployment of the ext-plugin后,它们将分别适用于所有tomcat的web应用程序(在ext-lib/global的情况下)或门户(以tomcat/webapps/ROOT的形式)。

+0

ext插件似乎是最干净的方法。感谢您的反馈 – madoke 2013-04-11 22:12:35

1

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

+0

我正在寻找更自动的东西,这正是我试图避免的,因为它增加了部署过程的复杂性 – madoke 2013-04-10 11:34:01

0

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

  • 将您的自定义代码添加到Liferay,例如, (如NivasKulukuri提到)
  • 将您的自定义代码添加到全局类路径
  • 通过使用类加载桥接(例如,阅读PortletClassInvoker)来访问您的自定义代码。 Liferay Servicebuilder在其类加载代理(以Clp结尾的类名称)中使用这些方法来跨越web应用进行调用,以考虑替代实现,例如,只需将所需的JS代码添加到您的自定义主题。如果您有需要这种变化很多的主题,想想引入common parent(我这样建议是最好的维护)

的类加载桥的缺点是使用起来感觉就像是在反射编程 - 什么你想定期做。特别是你想要日常维护的东西。