2010-03-10 58 views
4

我有兩個來自客戶端的jar文件,其中一個用於測試,另一個用於最終版本。目前,我將它們放在不同的文件夾中,並在部署我們的代碼時修改庫路徑,但能夠在運行時動態加載這兩個jar文件並在它們之間進行切換會很好。動態管理兩個具有相同包名和類名的jar文件

這可能嗎?

回答

6

您可以隨時編寫您自己的ClassLoader並使用標準ClassLoader進行鏈接。

http://download.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html

I 10年前用這種方法加載經由套接字被收到該指定和在XML文件中(通過套接字以及)類。我的java程序並不知道這些類在獲得XML文件和類之前就已經存在了。

+0

您不能將程序包導入使用動態加載的類的源文件中。所以在使用它們的文件中,你如何訪問字段和方法? – justinhj 2011-01-07 23:24:19

+0

您必須動態加載類並在任何地方使用接口。我認爲你已經在使用接口和工廠了,因爲我認爲測試和最終只是實現相同的接口,但只是有不同的實現。你只需要重寫你的工廠來動態加載類。 MyInterface i = Class.forName(「com.stackoverflow.MyTestClass」,true,MyClassloader); – chrisparker2000 2011-01-08 03:02:35

1

justinjh,

chrisparker2000的建議看起來是最可行的 - 你必須編寫自定義類加載器,我能想到的唯一的變化是什麼內容大致如下: 1.爲客戶交付罐子 - 說client.dev.jar和client.prod.jar,重命名爲不同的擴展名,並將它們放在類路徑中。重命名爲其他擴展名以防止容器加載該jar的內容。

  1. 使用自定義類加載器,按需加載的內容的基礎上,通過chrisparker2000提供的解決方案,通過將一個小門面上的客戶端類的頂部,說ClientClassFactory了基於環境(開發/生產/什麼否則)將使用自定義類加載器從client.dev.otherext或client.prod.otherext加載。
1

如果您使用像maven這樣的構建工具,您可以爲不同的作用域(測試vs生產)定義不同的jar文件(依賴關係)。

您也可以使用maven配置文件來定義不同的jar文件/版本集。

相關問題