2013-04-10 36 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(我這樣建議是最好的維護)

的類加載橋的缺點是使用起來感覺就像是在反射編程 - 什麼你想定期做。特別是你想要日常維護的東西。