在Java MPI-Bindings中避免命名空间冲突

3
我正在使用MPJ-api进行我的当前项目。我使用的两个实现是MPJ-express和Fast-MPJ。然而,由于它们都实现了相同的API,即MPJ-API,因此由于名称空间冲突,我不能同时支持这两个实现。
有没有办法在Java或Scala中包装具有相同包和类名称的两个不同库,以便同时支持这两个库?
到目前为止,我能想到的唯一方法是将模块移动到单独的项目中,但我不确定这是否是正确的方法。
1个回答

0

如果你的代码只使用了 MPI 函数的子集(就像我审查过的大多数 MPI 代码一样),你可以编写一个抽象层(特征或甚至是 Cake-Pattern),定义你实际使用的操作。然后,你可以为每个实现实现一个具体的适配器。

这种方法也适用于非 MPI 通信层(比如 Akka、JGroups 等)。

作为额外的加分点,你可以使用 SLF4J 的方法:根据类路径中实际存在的内容,在运行时选择正确的实现。


我认为这不会起作用,因为我需要添加的两个JAR文件都包含一个名为mpi.MPI的类。这本来不是问题,因为我可以热交换JAR文件,但是即使在库中也存在不一致性,其中一些方法(错误地)大写... - Felix
@Felix 好主意。你可以使用 JarJar 重命名包:http://radomirml.com/2009/11/08/repackaging-conflicting-jars-with-jarjar 我必须承认我从未尝试过。 - paradigmatic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接