2009-11-07 45 views
9

我有一個Java Project,爲此我使用Eclipse的Dynamic Web Project創建一個Web界面。 Web項目由一個servlet和兩個JSP組成。事情是這樣的:Java Web Project引用另一個Java項目

/JavaApplication 
    /src 
    /lib 
    /resources 
/WebApplication 
    /src 
    /Servlet.java 
    /WebContent 
    /WEB-INF 
    index.jsp 
    other.jsp 

現在,我需要從WebApplication參考JavaApplication,爲了使用它的類來處理Web請求。什麼是實現這一目標的最佳方式?我的想法是創建一個.jarJavaApplication,其中包含所有.class文件,/resources/libs。通過這種方式,我可以在Web應用程序中包含.jar文件,並且我可以擁有一個包含整個應用程序的單個.war文件。

您認爲如何?這個問題通常如何解決?

注意:我不想將Java Project轉換爲Web項目。

+0

我有同樣的問題。答案在:http://stackoverflow.com/questions/1693322/eclipse-web-project-dependencies解決了它。 – Bijan 2012-11-24 23:26:35

回答

15

在Eclipse下,您可以聲明項目引用對於給定的項目,您的案例中的Web應用程序。爲此,請右鍵單擊您的Web應用程序項目,然後轉至屬性>項目引用並選擇JavaApplication項目。這應該允許您從WebApplicationJavaApplication項目中調用代碼,而無需構建WAR。這是開發的解決方案。

對於標準部署(在IDE之外),您的確應該創建一個標準的WAR。爲此,您必須將JavaApplication打包爲包含.class文件和/resources而不是文件的JAR文件(它依賴於JAR在/lib下)。這些依賴關係實際上將結束於WAR的WEB-INF/lib目錄中,旁邊是您的JavaApplication的JAR。這些步驟通常使用AntMaven等工具自動完成。

+0

是的,我正在使用該解決方案進行開發。至於部署,在研究了一下.EAR文件之後,我可能會這樣做。謝謝。 – 2009-11-07 14:42:33

+2

這個建議是否正常工作,我正在嘗試,但在運行時不斷收到java.lang.NoClassDefFoundError,儘管在我的servlet中編譯正確。 – myahya 2010-11-24 15:17:16

+0

我的問題像@myahya – janwen 2012-04-24 05:09:03

0

通常,您將使用Java應用程序中的遠程服務bean創建API接口,該應用程序公開要在Web應用程序中調用的方法。您需要在您的Web應用程序中包含API接口的代理,該應用程序在Java應用程序中調用遠程服務Bean。請記住,您需要在web.xml文件中註冊遠程bean。

+0

JG想要使用他的應用程序中的類,它可能是一個簡單的可執行jar,我不確定使用遠程服務bean會有幫助。我想他的解決方案是正確的。 – 2009-11-07 01:47:24

+1

是的,這對我目前的需求來說有點過分了。 – 2009-11-07 14:40:49

2

考慮如果您的Web容器支持這個級別,請升級到EAR級別。

具有共享代碼的棘手部分是應該在哪裏放置通用代碼。一個複製pr web應用程序? Web容器中的副本?過度使用「共享這些類」可能會導致類加載器問題。

如果要創建兩個單獨網絡應用重構常見的Java代碼放到一個獨立的Eclipse項目,並從兩個WAR項目是指它。


編輯︰顯然我誤解了問題的描述,並認爲你問一個現有的和新的Web應用程序共享代碼。

如果你有一個Eclipse項目與你的應用程序,另一個與你的web前端,那麼你可以讓你的應用程序導出必要的資源,Eclipse Java EE中的「導出WAR」可以包裝在一個jar文件中,在WEB-INF/lib中爲你。您需要在「屬性」 - >「Web項目的Java EE模塊依賴項」中用複選標記明確說出。期待你不得不嘗試一下 - 這讓我花了一段時間來學習。

+0

謝謝,我會研究EAR解決方案。關於共享代碼,沒有任何代碼。 Web應用程序是java應用程序的簡單前端,它使用'Engine'來處理請求並將一些簡單的bean提供給JSP。由於此接口用於演示目的,因此需要輕鬆部署(我目前使用'jetty-runner')。對於開發,我使用的是@Pascal描述的解決方案,但我仍然在尋找更好的部署解決方案(目前,我將所需的所有東西[庫,資源,.classes]傳遞給'jetty-runner') 。 – 2009-11-07 14:48:14

16

在Eclipse項目性質,項目添加到的Java EE模塊依賴(Eclipse的3.5或以上)

Java EE Module Dependencies

部署大會(Eclipse的3.6或更新版本)中的項目條目屬性。

Deployment Assembly

這樣的Eclipse約需做正確的事,以創建一個WAR出來的這一切護理(它將/WEB-INF/lib結束)。沒有其他配置是必要的,甚至沒有在構建路徑擺弄一些。

+3

快速提示:對於Eclipse 3.6及更高版本,「Java EE Module Dependencies」重命名爲「Deployment Assembly」 – jaxvy 2012-06-15 07:34:37

+1

我一直在這裏搜索幾個小時。這工作完美。謝謝。 – nellbryant 2012-09-06 14:59:23

+1

這是最好的解決方案,thx。 – Alanmars 2014-05-17 15:50:40

2

連接Java應用程序與Web應用程序的開發:

右鍵單擊Web項目:

屬性>項目參考>中添加要參考

Java項目現在web項目屬性選項卡轉到

屬性>部署a ssembly>手動添加項目並運行應用程序