2012-09-10 40 views
6

我在我的portlet中使用了多個jar,例如c3p0。現在我想避免將jar放入每個portlet的lib文件夾中。我如何在多個portlet中共享一個jar文件?我應該如何將它們集成到Eclipse IDE中?添加一個外部jar或將它們放在一個專用項目中,並從那裏包含它們?如何在多個portlet中共享jar?

+0

您好Strauberry,我可能有一個解決方案,將解決您的更改JAR很多問題。我有完全相同的情況! – Jonny

回答

6

另一個解決方案是將它們放在../liferay-portal-<version>/tomcat-<version>/webapps/ROOT/WEB-INF/lib

如果你把他們在這裏你可以添加JAR作爲在門戶liferay-plugin-package.properties您的portlet的依賴(如果你使用的Liferay開發工作室或Liferay的IDE然後有一個很好的GUI)。

然後在部署Liferay將來自ROOT/WEB-INF/lib需要的jar複製到您的portlet WEB-INF/lib

我相信這是做Liferay的支持機制,因爲JAR文件複製到門戶並不需要重新啓動部署類路徑。

+0

嗨,喬尼,聽起來很棒!我只剩下一個問題:在開發過程中,我在哪裏將jar文件放在我的計算機上?在我的jar文件中有我想要使用方法的類文件(當然是哈哈)。我是否將它們作爲「External Jars」添加到我的項目中,以便Java編譯器能夠訪問它們? – strauberry

+0

我會把它們放在最適合你的地方,我的Liferay Plugins-SDK中有一個util/additional-libs文件夾。我還爲每個編譯JAR的Ant構建文件,然後將JAR複製到ROOT/WEB-INF/lib。因此,在重新部署Portlet時,更新的JAR已經在複製到portlet的正確位置。但是,如果您不使用Liferay IDE,那麼在「配置構建路徑」一節中將它們添加爲外部JAR ...並檢出Liferay IDE,因爲它會自動拾取JAR! :) – Jonny

2

我能想到的一種方法是將它們全部放在全局路徑中。

例如,在Tomcat中,您可以將它們放置在../liferay-portal-<version>/tomcat-<version>/lib/ext處,然後當您在eclipse中配置服務器運行時庫時,將在構建路徑中包含這些jar。

link也可能會幫助您決定,但它說*-service.jar,但我不知道它會在任何一個portlet中的其他罐子。

+0

謝謝你的回答!有沒有辦法使用瀏覽器界面進行部署?我現在經常更換常用的jar(繁重的開發),因此手動複製和粘貼並重新啓動會非常煩人...... – strauberry

+0

進入全局類路徑的jar需要重新加載服務器。我不知道任何其他方式來實現您的要求。雖然有些工具可以幫助在沒有服務器重啓的情況下加載jar,所以你可以嘗試尋找這些。 –

+3

把它們放到tomcat/lib/ext的好處是,那麼所有的web應用程序將共享相同的jar,由相同的類加載器加載。如果您在Web應用程序之間傳遞類的實例(例如通過會話),如果每個Web應用程序都有自己的副本,則可能會遇到ClassCastExceptions。使用lib/ext的缺點是需要重新啓動服務器才能部署新版本的jar。 –

相關問題