在不同的java项目之间共享X的Helper类,每个项目使用不同版本的X

在不同的java项目之间共享X的Helper类,每个项目使用不同版本的X,java,maven,classloader,Java,Maven,Classloader,假设我为kafka客户机编写了一个助手类。helper类与kafka客户端的版本不可知(没有API更改)。我的问题是,对于这种情况,java中的最佳实践是什么,我的意思是,我不能构建一个包含helper类的jar,因为它应该包含对某个kafka版本的依赖,这是有问题的,因为我想在两个不同的项目中使用同一个helper类,一个使用kafka:0.9.0,另一个使用kafka:1.0.0 非常感谢。在这种情况下,在助手的依赖项中,我指定了我选择支持的最小值,并希望消费者如果愿意,会显式地使用不同的版

假设我为kafka客户机编写了一个助手类。helper类与kafka客户端的版本不可知(没有API更改)。我的问题是,对于这种情况,java中的最佳实践是什么,我的意思是,我不能构建一个包含helper类的jar,因为它应该包含对某个kafka版本的依赖,这是有问题的,因为我想在两个不同的项目中使用同一个helper类,一个使用kafka:0.9.0,另一个使用kafka:1.0.0


非常感谢。

在这种情况下,在助手的依赖项中,我指定了我选择支持的最小值,并希望消费者如果愿意,会显式地使用不同的版本

编辑以添加:

另一个选项是使用提供的
范围
设置支持的最低版本。这意味着任何消费者都需要输入卡夫卡的一个版本才能编译他们的代码

Maven依赖范围文档:

为什么你不能?构建包含helper类的jar将构建包含helper类的jar。不是卡夫卡客户端类。因此,jar的用户只会使用您的jar,以及他们想要的kafka客户端的任何版本。因为我的helper类包含对kafka类的引用,所以我无法在不指定kafka客户端依赖项的情况下构建jar。按照Taylor的回答,使用scope
提供的
?@AlexBelous定义依赖项,这并不能阻止库的用户选择使用另一版本的kafka客户端。但是,这使他能够设置kafka依赖项,即使他没有使用my helper classUsing提供的似乎确实是一个好方法。您将能够编译和发布您的库,您的其他项目将定义他们想要的任何卡夫卡版本。其局限性在于,需要在其他项目上定义卡夫卡依赖项,这与经典依赖项不同,在经典依赖项中,这种可传递依赖项在默认情况下可用