解决java包依赖关系

时间:2010-08-30 20:39:31

标签: java jar dependencies package

现在是时候细分我正在开发的平台,我正在寻找有关如何处理跨组件依赖关系的建议。我在那里有很多案例,所以我举一个例子。

我有一个我想让开发人员看到的Address类。它也被my.Contacts,my.Appointments和my.Location包中的类引用 - 我希望每个包都单独编译,jar-d和传递。当然,我希望Address是一个单独的类 - 一个Address透明地跨这些平台组件工作。

如何打包,构建和交付地址?

谢谢!

3 个答案:

答案 0 :(得分:3)

两个想法:

  1. Address听起来像是可用于不同可交付成果的通用组件,因此应该可以在某些通用核心库中使用
  2. 组件与Address接口通信可能有意义,并且可以单独提供实现(例如,提供Address接口和AddressImpl实现。这将减少核心库与开发人员开发的库之间的绑定量。

答案 1 :(得分:2)

在这种情况下,Address是一个值得拥有自己jar的库的一部分。如果你在my.Contacts,my.Appointments和my.Location中创建一个名为Address的类,并且你想在同一个应用程序中使用所有这些jar,那么你的Address类就会有冲突。

答案 2 :(得分:1)

我建议你不要单独“交付”这些罐子。 Java有非常微妙的版本控制问题,您不希望遇到这些问题。将所有内容组合在一起并将其打包成一个或两个罐子,并始终提供两个罐子,或者将它们组合在一起并提供一部分罐子(但从不组合新旧罐子 - 不要只是尝试将一个罐子作为更新发送)。

如果必须单独构建它们,请非常清楚最终常量是否已编译而未引用 - 因此,如果更改一个并传递新jar,则不会更新旧jar中的任何引用。

更改的方法签名也会产生奇怪的,不可预测的结果。

听起来你也想要一个开发人员界面 - 这可能是一组驻留在一个单独的jar中的接口和类。如果你把那个罐子弄得足够好以至于你永远不需要对它进行转换(当然,没有引用外部常量)你可能会因为没有更新它而逃脱,这将使你的客户的扩展变得不稳定。