2016-11-17 81 views
1

我使用Eclipse Neon和Maven進行開發。有2個主要項目。項目1包含所有包括SOAP和RESTful的Web服務。它也實現了所有的數據庫訪問。 Project 2包含一個Angular實現的UI。 Angular UI利用項目1的RESTful服務進行所有數據訪問。應用程序打包到包含來自兩個項目的WAR文件的EAR文件中。 (這不是我的設計!)帶有多個WAR文件的EAR文件。共享類

有在處理授權問題的UI應用程序的幾個servlet類。到目前爲止,每個WAR文件中的類都是完全獨立的。現在我需要從一個servlet類的數據庫表中訪問數據。由於該功能已經在項目1中,因此我應該能夠簡單地利用項目2中的類。

在Eclipse中,我的工作區中都有兩個項目,並且已將Project 1添加到Project 2的構建路徑中,因此可以添加Project 2所需的適當對象。但是,當我嘗試構建Project 2時,它無法從Project 1中找到類。我嘗試將Project 1添加到Project 2的導出列表中,但這沒有什麼區別。

我可以提供必要的pom文件。

我只是不知道該怎麼嘗試。分享在這兩個應用程序,這些DB訪問功能將僅包括在EAR內包裝他們共同的庫

+1

如果項目2對1項目依賴你將需要[編輯POM文件(http://stackoverflow.com/questions/22438304/intermodule-dependencies-in-maven)添加這種依賴性。如果你需要這樣做的幫助,我建議你給pom文件省略多餘的內容。 (也就是說,對於項目2而言,對於承載Web服務的項目具有編譯時依賴性是很奇怪的:Web服務項目應該由其服務訪問,而不是其內部類。) – DavidS

+0

我受到我的嚴格限制應用程序的架構。所以我不得不放棄我想要做的事情,並使用Angular的RESTful服務和Servlet調用。我真的很感激興趣和投入。我想就一些回覆提供一些反饋意見。有時候,我們中的很多人會爲擁有架構師和分析人員的公司工作,他們會決定如何在該項目上開展工作。開發人員無法前來進行修改,因爲他們認爲這樣做會更好。我們必須在該架構的邊界內進行更改。 – OldGuy

+0

在我的情況下,更加困難的是我無法更改Eclipse中的任何項目配置。一切都必須在Maven配置中完成。這使得它多次變得更加困難。如果無法從Maven完成,則不允許。 – OldGuy

回答

0

的一種方式。

this maven documentation

只是一個此言一出,國際海事組織它不是一個很好的模式有多個應用程序訪問/修改相同的數據模型。 請參閱this answer問題「使用一個數據庫的多個應用程序?」瞭解詳情。

那麼也許你應該考慮保持這個數據模型訪問邏輯在現有的第一戰(包含REST和SOAP服務),讓你的第二個應用程序後端消耗例如從第一個應用了新的服務?

另一種選擇是將所有這些web應用打包成一個單一的一個(所以單戰),同時提供用戶界面和後臺功能(你的servlet和API一起使用)。

編輯:我無法判斷這個應用程序的設計,因爲我無法來看看它。正如@David所指出的那樣,一般來說,擁有多個具有不同用途的Web應用程序並不是一個壞模式,打包成EAR或者不是,如果這些API是針對不同類型的客戶端(UI,後端等)製作的,甚至更多。

+0

我完全同意你的看法。但是,這只是一個應用程序。誰將這個項目放在一起決定用兩個項目來構建它,這樣就產生了兩個放在一個耳朵文件中的戰爭文件。我完全同意這是一個設計的fubar。而且我和這個項目上的人員都無法改變這一點。所以我們必須解決它。如果我能弄清楚如何告訴Maven在構建UI戰爭文件時將服務項目中的類包含進來,我的問題就會得到解決。 – OldGuy

+0

您不需要改變第一個解決方案(EAR共享庫)部署應用程序的方式。但是,我很好奇,是什麼阻止你和你的團隊改變這個應用程序的設計? (順便說一句,我不能判斷它的設計,因爲我不能看看它)) –

+3

你抱怨設計,@OldGuy,但我想知道它的哪一部分完全是你不喜歡的。 **這聽起來像是誰設計的實際上遵循了一個好的設計原則**:您的UI代碼通過一個接口與業務邏輯進行交互:Web服務。如果有的話,這聽起來像你正在計劃通過繞過Web服務來直接訪問數據庫代碼_breaking_這個好的封裝。我認爲Rémi是正確的,建議您爲servlet添加一個新的REST/SOAP服務來使用,但正如他所說的,我們無法真正判斷這個距離的設計。 – DavidS