如何动态管理项目依赖项

时间:2012-03-16 17:20:58

标签: maven osgi dependency-management

我们正在编写一组新服务,并决定让它们共享一个通用接口......称之为BaseService。我们的想法是,每当有人想在我们的组织中开发新服务时,他们应该只能扩展和使用这个BaseService。 我们已经编写了一些其他类,它们也构成了这个基础jar的一部分,它可以处理事务并使用hibernate等连接到数据库。

现在扩展BaseService的所有服务都是同一个项目(Eclipse + Maven)的一部分,而且有些服务是相互依赖的,但因为它们在同一个项目中我们没有但是,我们希望编写40-50个服务来扩展基本服务,并且它们也是相互依赖的。 我担心基础项目的规模会很大,而且只是因为当有人必须使用一项服务时,他们可能不得不依赖我有50项服务的基础jar。

有没有办法可以让一些项目动态依赖其他项目? 假设我有一个依赖于服务B的服务A,当我构建/编译服务A时,它应该能够意识到它依赖于服务B并自动使用服务B jar。

我听说过OSGi,它会解决我的问题,还是有办法用Maven做的,还是有更简单的解决方案?

对于长篇帖子感到抱歉!

提前感谢您的建议

2 个答案:

答案 0 :(得分:2)

“动态”管理项目依赖关系没有任何意义,因为根据定义,构建依赖关系不是动态的。

至少就目前而言,您的问题似乎完全在于如何构建代码而不是如何运行代码。如果您对创建可以动态添加新服务实现的运行时系统感兴趣,那么OSGi可能是要查看的解决方案。这里的另一个优点是,您可以强制将API与实现分离,并防止实现服务无效地依赖于您不希望它们具有可见性的核心模块部分。 / p>

您还可以使用OSGi通过版本控制来管理核心服务API的演变;例如,您如何传达这样一个事实,即对API进行了非破坏性的更改而不是重大变更等。

答案 1 :(得分:1)

我想说如果我理解你的问题是正确的,有两种选择。第一。您已经定义了一个接口(java术语),现在您有不同的实现。 Maven的简单解决方案是拥有一个模块,例如:service-api,而且这个模块将被释放,并且可以被其他人用作依赖项。在他们一边,他们只是实现了界面。依赖项没问题。如果你更多的是谈论OSGi而不是你应该看看maven-tycho。