2012-03-06 111 views
0

我有一個Maven 3項目,該項目使用Hibernate 3.在Hibernate屬性文件中,有對hibernate.connection.provider_class與對應C3P0連接提供商(org.hibernate.connection.C3P0ConnectionProvider)類條目。顯然,這個類只在運行時使用,所以我不需要在編譯範圍中添加我的POM中相應的依賴項。現在,我想給出使用任何連接池框架的可能性,,所以我也不會將運行時依賴添加到POM運行時依賴關係(例如連接池)和類路徑?

最佳做法是什麼?

我考慮添加到對應於運行時依賴性類路徑中的條目(在這種情況下,休眠-C3P0)在應用程序運行時(例如,使用命令行)。但是,我不知道這是否可能。

這與SLF4J差不多(可能是完全相同)的問題。我不知道Hibernate是否也使用門面模式進行連接池。

感謝

+0

任何解決方案..? – 2012-03-07 15:31:22

回答

2

因爲您的代碼不依賴於連接池(既不是主碼也不是測試需要的話),沒有一點提到任何地方的依賴。

如果有人提到它,那麼這將是休眠,因爲Hibernate提供在其配置此功能。

但是你可以用optional: true添加到您的POM來表示:

  1. 我支持此功能
  2. 如果你使用它,那麼我建議這個框架和這個版本

那將使您的項目的消費者的生活變得更簡單。提供

但總體來說,你不應該提到的功能/其他項目需要,除非它們對你的代碼有一定影響(當你提供一個更簡單的方法來配置連接池的Hibernate等)。

[編輯]您的主要擔心可能是如何配置項目的質量保證。這個新機芯的技術術語是「DevOps」 - 與客戶(QA)必須艱苦配置的轉儲WAR不同,配置是開發過程的一部分,就像所有其他產品一樣。你傳遞的是一個完全配置的,隨時可用的設置。

要實現這一點,創建一個名爲「項目 -qa」另一個Maven的模塊,它取決於你的項目和一切你需要把死代碼到運行的應用程序(所以這將取決於DBCP,再加上它會含有所有必要的配置文件)。

Maven的支持overlayed WARs,讓您可以順利地實現這一點。

+1

我的項目不是圖書館。當我發佈它時,QA可能會開始測試它。但是,hibernate-c3p0依賴不在程序集中,因爲我不想強制他們使用c3p0作爲連接池框架。如果我使用可選範圍聲明對c3p0的依賴關係,它有什麼用處? – 2012-03-08 15:50:07

+0

在這種情況下,它沒有。對於像Hibernate這樣的庫和框架更有用。在你的情況下,QA必須知道如何正確設置Hibernate。 – 2012-03-08 15:59:12

+0

但是,因爲如果QA選擇使用C3P0連接池,Hibernate可能需要hibernate-c3p0 JAR,那麼它對類路徑的工作方式如何?如果我沒有在POM中聲明C3P0依賴項,那麼JAR將不在類路徑中。 – 2012-03-08 18:16:40

0

你可以使用不同的配置文件爲每個連接提供商。在每個配置文件中,將運行時依賴關係與您要使用的連接提供程序對應,並相應地更改hibernate.connection.provider_class屬性。

有關如何在配置文件中配置的依存關係,請參閱Different dependencies for different build profiles in maven更多細節。

要了解如何改變hibernate.connection.provider_class屬性的值看How can I change a .properties file in maven depending on my profile?

+0

該解決方案不能幫助我,因爲在生產決定使用其他連接池框架的情況下,項目必須重新編譯(以便重新過濾屬性文件並添加所需的運行時依賴項)。不管怎麼說,還是要謝謝你。 – 2012-03-08 12:51:41

+0

你使用什麼樣的包裝? JAR,WAR ...? – 2012-03-08 12:59:21

+0

JAR和WAR。它關係到數據庫訪問,我獨立和訪問數據庫的Web應用程序。 – 2012-03-08 14:00:16

1

您可以標記你的依賴作爲optional。在這種情況下,它不會被打包成檔案。在這種情況下,您必須確保您的容器提供了所需的庫。

+0

如果編譯時不需要依賴關係,並且您將委託給容器提供它的責任,那麼沒有理由在您的pom中聲明依賴關係,甚至沒有可選的 – 2012-03-08 13:34:23

+0

@Fabrice:true,但是出於測試和開發的目的建議這樣做。 – tom 2012-03-08 14:17:06

+1

+1「可選」意味着您的代碼可以利用這一點,這反過來又使您的項目消費者更容易正確配置其POM。 – 2012-03-08 14:39:01

相關問題