2012-11-13 85 views
3

我正在爲當前項目使用MPJ-api。我正在使用的兩種實現是MPJ-express和Fast-MPJ。但是,由於它們都實現了相同的API,即MPJ-API,由於名稱空間衝突,我無法同時支持這兩種實現。避免Java MPI綁定中的名稱空間衝突

是否有任何方式使用相同的包和類名來包裝兩個不同的庫,以便可以在Java或Scala中同時支持這兩個庫?

到目前爲止,我能想到的唯一方法就是將模塊移動到單獨的項目中,但我不確定這將是什麼方法。

回答

0

如果你的代碼只使用MPI函數的一個子集(就像我已經查看過的大多數MPI代碼一樣),你可以編寫一個抽象層(特徵或者甚至Cake-Pattern)來定義你實際使用的操作。然後你可以爲每個實現實現一個具體的適配器。

這種做法也將與非MPI通信層(認爲阿卡,JGroups的,等等)

作爲獎勵點,你可以使用SLF4J的方式工作:正確執行是根據什麼是在運行時選擇實際上在類路徑中。

+0

我不認爲這會工作,因爲我需要添加的兩個罐子都包含一個名爲mpi.MPI的類。這不會是一個問題,因爲我可以熱插拔jar文件,但是在某些方法(錯誤地)大寫的庫中甚至存在不一致... – Felix

+0

@Felix好點。你可以使用'JarJar'來重命名包:http://radomirml.com/2009/11/08/repackaging-conflicting-jars-with-jarjar我必須承認我從來沒有嘗試過。 – paradigmatic