2012-11-13 58 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