2015-01-05 48 views
1

我有一個關於hibernate-annotations jar在我的maven項目中的位置的具體問題。Hibernate依賴關係在多層應用程序中的位置

我的項目由三個模塊組成。模塊客戶端和服務器都取決於共享模塊。 Maven構建了兩個部署包:Client + Shared和Server + Shared。

帶註釋的Hibernate實體位於共享模塊中,因爲我需要在客戶端和服務器之間(通過RMI)傳遞它們。

現在來了我的問題。 hibernate-annotations.jar被用作Shared模塊的依賴,以允許編譯Hibernate實體。庫本身依賴於hibernate-core。因此,我在已部署的客戶端應用程序中使用了hibernate庫,即使我並不真的需要它們。罐子很大,我想盡量讓客戶儘量瘦。

有沒有一些成熟的技術來避免這個問題?想到的一點是使用基於XML的Hibernate配置,所以我可以將Hibernate依賴關係移到服務器模塊,但我想堅持註釋。

謝謝。

+1

是,創建用於客戶端 - 服務器通信的DTO。 – Smutje

+0

你能對此更具體嗎?據我瞭解,我的項目結構完全一樣。帶註釋的DTO在客戶端和服務器之間共享,因此在兩個模塊中都需要hibernate庫。 –

回答

1

您可以在客戶端的pom.xml中排除共享依賴關係的一個或多個傳遞依賴關係。此處作爲一例假設共享項目有「org.shared」,工件ID「共享」和版本「0.0.1-快照」組ID:

<dependency> 
    <groupId>org.shared</groupId> 
    <artifactId>shared</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <exclusions> 
    <exclusion> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
    </exclusion> 
    ... 
    </exclusions> 
</dependency> 
+0

感謝您的回答。我認爲這將部分工作,但我仍然需要用於編譯的hibernate-annotation依賴項。 –

+0

只能排除那些依賴於hibernate-annotation,但在編譯時不需要的依賴項。在你的情況下,只有實體類需要註解,而不是hibernate-core。在大多數情況下,編譯和運行時還需要依賴項的傳遞依賴項。但是你的例子是一個特例,因爲在客戶端只使用了hibernate庫的一個獨特部分。檢查Maven的依賴關係圖以查找更多不必要的依賴關係。 – gclaussn

1

我認爲你應該在你的pom中使用scope標籤作爲依賴。

看看這個,並選擇合適的一個:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

據我,如果你只需要在編譯時的依賴,你應該使用的範圍「編譯」等

希望這將幫你!

+0

感謝您的回答。嗯,我認爲,'compile'作用域也會在運行時包含庫,但我可能會使用'provided'。不知道運行時會發生什麼,但是,如果註釋在沒有庫的情況下無法識別。我將在今天晚上進行測試併發布我的結果。 –

相關問題